Зацикливание на объектах в R - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь перебрать объекты в R.

myfunc.linear.pred <- function(x){
  linear.pred <- predict(object = x)
  w <- exp(linear.pred)/(1+exp(linear.pred))
  as.vector(w)
}

Функция здесь работает отлично, как и должно.Возвращает вектор из 48 строк и исходит из объекта x.Теперь «х» - это не что иное, как модель полной регрессии из функции GLM (подумайте: mod.fit <- glm (dep~indep, data = data)).Проблема в том, что у меня есть 20 различных таких ('mod.fit') объектов, и мне нужно найти прогнозы для каждого из них.Я мог буквально повторить код, но я искал более подходящее решение.Итак, что я хочу, это матрица с 48 строками и 20 столбцами для вышеуказанной функции.Это, вероятно, является базовым для опытного пользователя, но я когда-либо использовал циклы «apply» и «for» для чисел, а не для объектов.Я смотрел в радость, но не мог понять это.

Я пытался: (и это, вероятно, глупо)

allmodels <- c(mod.fit, mod.fit2, mod.fit3)
lpred.matrix <- matrix(data=NA, nrow=48, ncol=20)
for(i in allmodels){
  lpred.matrix[i,] <- myfunc.linear.pred(i)
}

, что, очевидно, не будет работать, потому что allmodels имеет класс "список", и он содержит все вещи изФункция GLM.Надеюсь, кто-то может помочь.Спасибо!

1 Ответ

1 голос
/ 27 сентября 2019

Чтобы использовать lapply, у вас должен быть объект списка, а не векторный объект.Примерно так должно работать:

## Load data
data("mtcars")

# fit models
mod.fit1 <- glm (mpg~disp, data = mtcars)
mod.fit2 <- glm (mpg~drat, data = mtcars)
mod.fit3 <- glm (mpg~wt, data = mtcars)

# build function
myfunc.linear.pred <- function(x){
  linear.pred <- predict(object = x)
  w <- exp(linear.pred)/(1+exp(linear.pred))
  as.vector(w)
}

# put models in a list
allmodels <- list("mod1" = mod.fit1, "mod2" = mod.fit2, "mod2" = 
mod.fit3)

# use lapply and do.call to generate matrix of prediction results
df <- do.call('cbind', lapply(allmodels, function(x){
  a <- myfunc.linear.pred(x)
}))

Надеюсь, это поможет

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