Я понимаю, что «объект типа« замыкание »не является подмножеством» может возникнуть при попытке подмножества функции или при попытке доступа к функции с использованием $
.Тем не менее, это не так в моем коде, как вы увидите ниже.Я диагностировал проблему по тому факту, что по какой-то причине построение линейной модели с использованием формулы, хранящейся в объекте формулы, приведет к тому, что car::Boot
сгенерирует «ошибку с подмножеством» при вызове линейной модели в аргументе object
.
library(car)
library(purrr)
library(boot)
set.seed(111)
## Reprex - Working
train_df1 <- data.frame(y = rnorm(10, mean = 10, sd = 2))
train_df1$x <- train_df1$y*1.5
train_df2 <- data.frame(y = rnorm(5, mean = 10, sd = 3))
train_df2$x <- train_df2$y*1.75
train_list <- list(train_df1, train_df2)
models_list <- train_list %>%
map(~lm(y ~ x, data = .))
car::Boot(object = models_list[[1]]) ## works fine
## Reprex - Not Working
n <- colnames(train_df1)
n <- trimws(n, "both")
f <- as.formula(paste("y ~", paste(n[!n %in% "y"], collapse = " + ")))
models_list <- train_list %>%
map(~lm(f, data = .)) ## error is due to using the "f" formula object instead of lm(y ~ x, data = .)
car::Boot(object = models_list[[1]]) ## error occurs here
#Error: object of type 'closure' is not subsettable
car::Boot(object = models_list[[2]])
#Error: object of type 'closure' is not subsettable
out <- models_list[[1]]
car::Boot(object = out)
#Error: object of type 'closure' is not subsettable