在R
中,生成一些虚假数据:
x1 <- runif(100)
y1 <- 2*x1 + runif(100)
产生线性模型,并将其传递给Boot
包中的car
fit1 <- lm(y1 ~ x1)
Boot(fit1)
没问题。现在,将相同的代码包装在一个函数中。
do_boot <- function(x,y) {
fit <- lm(y ~ x)
Boot(fit)
}
do_boot(x1,y1)
这会产生错误
Error in eval(predvars, data, env) : object 'y' not found
为什么?
答案 0 :(得分:2)
出于某种原因,我无法解释(也许是因为内部Boot
是如何工作的),因此需要将数据存储在全局环境中。看到错误:
您可以将数据分配给全局环境:
library(car)
x1 <- runif(100)
y1 <- 2*x1 + runif(100)
do_boot <- function(x,y) {
assign("x",x,envir=parent.frame())
assign("y",y,envir=parent.frame())
fit <- lm(y ~ x)
Boot(fit)
rm(x)
rm(y)
}
do_boot(x1,y1)
或直接使用它们:
library(car)
x1 <- runif(100)
y1 <- 2*x1 + runif(100)
do_boot <- function() {
fit <- lm(y1 ~ x1)
Boot(fit)
}
do_boot()
对我来说,这两种解决方案都怪异而笨拙。不过,我更喜欢第一个。