好吧,您可以创建一个空/无意义对象数组,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
更有可能正确工作......