好了,你可以如下创建空/无意义lm
对象的数组:
z <- NA
class(z) <- "lm"
lm_array <- replicate(20,z,simplify=FALSE)
但是这可能不是解决问题的最好办法。你可以只创建适当的长度(vector("list",20)
)的空单并填写的要素,当您去:R是弱类型不够,它不会介意你lm
对象替换NULL
值。更惯用,不过,您可以将您的预测名单上运行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 2013-02-13 20:31:53
由于您明显在谈论单个尺寸的对象(事实上是一个非尺寸的对象),因此您应该避免使用“数组”这个词作为R语法中的特定含义。 – 2013-02-13 21:05:19
是的,我认为你是对的(我在R方面还是比较新的)。 – user2069819 2013-02-13 22:39:08