Ну, вы можете создать массив пустых/бессмысленные lm
объектов следующим образом:
z <- NA
class(z) <- "lm"
lm_array <- replicate(20,z,simplify=FALSE)
, но это, вероятно, не самый лучший способ решить эту проблему. Вы можете просто создать пустой список соответствующей длины (vector("list",20)
) и заполнить элементы по мере продвижения: R достаточно слабо напечатан, что не будет против вас заменять NULL
значениями с объектами lm
. Более идиоматически, хотя, вы можете запустить lapply
в списке имен предикторов:
my_data <- data.frame(result=rnorm(10), v1=rnorm(10), v2=rnorm(10))
prednames <- setdiff(names(my_data),"result") ## extract predictor names
lapply(prednames,
function(n) lm(reformulate(n,response="result"),
data=my_data))
Или, если вы не чувствуете, как создать анонимную функцию, вы можете сначала создать список формул (с помощью lapply
) и затем запустить lm
на них:
formList <- lapply(prednames,reformulate,response="result") ## create formulae
lapply(formList,lm,data=my_data) ## run lm() on each formula in turn
создаст тот же список lm
объектов в качестве первой стратегии выше.
В целом рекомендуется избегать использования синтаксиса, такого как my_data$result
внутри формул моделирования; вместо этого попытайтесь настроить все, чтобы все переменные в модели были взяты изнутри объекта data
. Таким образом, методы, подобные predict
и update
, с большей вероятностью будут работать правильно ...
Действительно ли это 'my_data [i,]' в вашем 'lm' вызове, а не' my_data [, i] '? – juba
Поскольку вы, очевидно, говорите об одном измеренном объекте (на самом деле нестандартном), тогда вам следует избегать использования слова «массив», которое в качестве конкретного значения используется в синтаксисе R. –
Да, я думаю, вы правы (я все еще относительно новичок с R). – user2069819