Обертывание вызова Boot в функции выдает ошибку - PullRequest
0 голосов
/ 26 февраля 2019

В 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

Почему?

1 Ответ

0 голосов
/ 27 февраля 2019

По какой-то причине я не могу объяснить (возможно, из-за того, как внутренне работает 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()

Для меня оба решениястранно и некрасивоЯ предпочитаю первый, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...