在R函数

时间:2016-06-07 10:34:53

标签: r environment forecasting

我在一个更大的函数中有几个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。另一个错误似乎难以重现,但让它与显式环境一起工作应该足够了。

2 个答案:

答案 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)

终于想通了!为避免弄乱tslmlm的环境,您只需将数据作为单独的参数即可。将tslm行更改为

tslm(data ~ trend,data=e$x)

正常工作。