首页 > 解决方案 > 在 R 中,为什么将 ls 作为函数参数传递不同于将 ls() 作为函数参数传递?

问题描述

f <- function(x) {
  a <- 1
  x
}
f(ls())

在上面的代码中,对 f(ls()) 的调用将打印出全局环境中的变量。

但:

f <- function(x) {
  a <- 1
  x()
}
f(ls)

将打印出函数 f 的环境中的变量,即“a”和“x”。

标签: rlazy-evaluation

解决方案


在第一种情况下,您传递ls()- 的结果,它是环境中所有对象的向量。你的函数只打印传递的内容x,即 - 的结果ls()

在第二种情况下,您传递一个函数,并且函数 get 在函数体内执行。

基本上,您可以将呼叫的第一个版本视为:

x <- ls()
f(x)

print(ls())再举一个例子:看看和之间的区别print(ls)


推荐阅读