В то время как Сэм предоставил работы и является хорошим решением, я лично предпочел бы пойти немного по-другому. Его ответ уже принят, поэтому я просто размещаю это ради полноты.
dat1 <- data.frame(y = rpois(100, 5),
x1 = runif(100),
x2 = runif(100),
x3 = runif(100),
z1 = runif(100),
z2 = runif(100))
lapply(colnames(dat1)[5:6],
function(x, d) lm(as.formula(paste("y ~ x1 + x2 + x3", x, sep = " + ")), data = d),
d = dat1)
Вместо цикла по фактическим колонкам кадра данных, это только петли над строкой имен. Это обеспечивает некоторые улучшения скорости, поскольку количество копий между итерациями меньше.
library(microbenchmark)
microbenchmark({ lapply(<what I wrote above>) })
# Unit: milliseconds
# expr
# {lapply(colnames(dat1)[5:6], function(x, d) lm(as.formula(paste("y ~ x1 + x2 + x3", x, sep = "+")), data = d), d = dat1)}
# min lq mean median uq max neval
# 4.014237 4.148117 4.323387 4.220189 4.281995 5.898811 100
microbenchmark({ lapply(<other answer>) })
# Unit: milliseconds
# expr
# {lapply(dat1[, 5:6], function(x) lm(dat1$y ~ dat1$x1 + dat1$x2 + dat1$x3 + x))}
# min lq mean median uq max neval
# 4.391494 4.505056 5.186972 4.598301 4.698818 51.573 100
Разница достаточно мал для этого игрушечного примера, но как число наблюдений и предикторов увеличиваются, разница, вероятно, станет более заметной.
Возможный дубликат [Линейный цикл регрессии для каждой независимой переменной отдельно от зависимых] (http://stackoverflow.com/questions/25036007/linear-regression-loop-for-each-independent-variable-individually-against-depend) –
@SamFirke OP, вероятно, также будет нуждаться в помощи в обучении, как построить каждую формулу (поскольку их формула немного больше задействована), используя 'paste' или что-то еще, и эта информация не связана с вопросом, с которым вы связаны. – joran
Да, это выполнимо в R. Один из подходов - использовать функцию apply, такую как 'lapply', которая возьмет ваш вектор из 10 переменных и вернет список из 10' lm' объектов с изменением этой переменной. См. Также http://stackoverflow.com/questions/13418148/efficient-looping-logistic-regression-in-r и http://stackoverflow.com/questions/15304514/for-loops-for-regression-over-multiple- переменные-вывод-а-подмножество? RQ = 1. Функция apply больше «R-ish», чем for-loop. –