我在一个更大的函数中有几个tslm
函数(来自forecast
R包)。我似乎无法让他们两个找到他们的相关对象。包括一个显式环境修复了一个实例并打破了另一个实例。最小的例子如下:
library(forecast)
data(gas)
testlm <- function(x)
{
e<-new.env()
e$x<-x
tslm(e$x~trend)->e$z
return(e$z)
}
testlm(gas)
这会引发以下错误:
Error in eval(expr, envir, enclos) : object 'e' not found
我还试图通过设置
明确地给公式提供正确的环境e$f<-as.formula("e$x~trend+season",env=e)
但得到了完全相同的错误。
P.S。另一个错误似乎难以重现,但让它与显式环境一起工作应该足够了。
答案 0 :(得分:0)
首先,你有没有理由这样做而不是:
testlm <- function(x)
{
return(tslm(gas~trend))
}
testlm(gas)
Call:
tslm(formula = gas ~ trend)
Coefficients:
(Intercept) trend
-9029.6 127.7
我不确定你为什么需要这种新环境。
但是,无论如何。问题是您正在创建嵌套在函数环境中的新环境。使用return时,无法从此嵌套环境中提取值。相反,您需要通过在函数之前定义它来全局使用此环境:
library(forecast)
data(gas)
e <- new.env()
testlm <- function(x)
{
e$x <- x
e$z <- tslm(e$x~trend)
return(e$z)
}
testlm(gas)
答案 1 :(得分:0)
终于想通了!为避免弄乱tslm
或lm
的环境,您只需将数据作为单独的参数即可。将tslm
行更改为
tslm(data ~ trend,data=e$x)
正常工作。