在R中,为什么将ls作为函数参数传递与将ls()作为函数参数传递有所不同?

时间:2018-10-03 18:31:05

标签: r lazy-evaluation

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

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

但是:

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

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

1 个答案:

答案 0 :(得分:1)

在第一种情况下,您传递ls()的结果-这是环境中所有对象的向量。然后,您的函数仅显示x传递的内容,即ls()的结果。

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

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

x <- ls()
f(x)

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