函数lm(...)返回类'lm'的对象。如何创建此类对象的数组?我想做以下事情:
my_lm_array <- rep(as.lm(NULL), 20)
#### next, populate this array by running lm() repeatedly:
for(i in 1:20) {
my_lm_array[i] <- lm(my_data$results ~ my_data[i,])
}
显然,行“my_lm&lt; - rep(as.lm(NULL),20)”不起作用。我正在尝试创建一个'lm'类型的对象数组。我该怎么做?
答案 0 :(得分:2)
不确定它是否会回答您的问题,但如果您要执行的操作是针对数据框的不同列从变量运行一系列lm
,则可以执行以下操作:
data <- data.frame(result=rnorm(10), v1=rnorm(10), v2=rnorm(10))
my_lms <- lapply(data[,c("v1","v2")], function(v) {
lm(data$result ~ v)
})
然后,my_lms
将是类lm
的元素列表。
答案 1 :(得分:1)
好吧,你可以创建一个空的/无意义的lm
对象数组,如下所示:
z <- NA
class(z) <- "lm"
lm_array <- replicate(20,z,simplify=FALSE)
但这可能不是解决问题的最佳方法。您可以创建一个适当长度(vector("list",20)
)的空列表,并在进行中填充元素:R键入的值太弱,以至于您不会介意用{{替换NULL
值1}}对象。但更具惯用性的是,您可以在预测变量名称列表中运行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
等方法更有可能正常工作......