在 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)
终于明白了!为了避免弄乱 tslm
或 lm
的环境,您可以将数据作为单独的参数。将 tslm
行更改为
tslm(data ~ trend,data=e$x)
正常工作。
我在一个更大的函数中有几个 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)
终于明白了!为了避免弄乱 tslm
或 lm
的环境,您可以将数据作为单独的参数。将 tslm
行更改为
tslm(data ~ trend,data=e$x)
正常工作。