函数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 <- rep(as.lm(NULL),20)“不起作用。我正在尝试创建一个'lm‘类型的对象数组。我该怎么做?
发布于 2013-02-14 04:33:54
不确定它是否会回答您的问题,但如果您想要做的是对数据框的不同列运行来自一个变量的一系列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
类的元素列表。
发布于 2013-02-14 04:36:20
您可以创建一个空的/无意义的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
这样的方法更有可能正确工作……
https://stackoverflow.com/questions/14862465
复制相似问题