我发现 zoo's在函数体中使用时transform
无法使用其他(即不是 zoo 对象的一部分)变量。
让我解释:
我在提示符下输入了以下代码来创建一个小的两列动物园对象z
并添加一个从现有列和一个变量计算的新列x
:
library(zoo)
z <- zoo(matrix(1:10, ncol=2, dimnames=list(NULL, c("a", "b"))), order.by=2001:2005)
x <- 2
transform(z, c = x*a)
我得到了想要的结果,一个带有新列的 zoo 对象c
。这里没问题。
现在我想transform
在函数体中使用;计算的变量作为参数传递给函数:
rm(x)
f <- function(data, x) { transform(data, c = x*a) }
f(z, 2)
这与Error in eval(expr, envir, enclos) (from #1) : object 'x' not found
. x <- 2
如果我在提示符下分配,它可以工作(因此rm(x)
如上所述)。
使用数据帧(即transform.data.frame
)没有问题。
我认为当transform.zoo
调用时transform.data.frame
,形式的绑定f
会丢失。我不太了解 R 的环境,无法找出这里到底出了什么问题。
编辑补充:不仅transform
不能得到形式,而且不能从函数体内得到变量。
有没有办法让transform
看到x
?(我知道我可以在没有转换的情况下工作,但它是用于简短代码的好工具。)