在 R 函数中找不到对象

Object not found within R function

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

首先,你这样做是不是有原因而不是:

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)

终于明白了!为了避免弄乱 tslmlm 的环境,您可以将数据作为单独的参数。将 tslm 行更改为

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

正常工作。