1

函数 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”类型的对象数组。我怎么做?

4

2 回答 2

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 将是 class 的元素列表lm

于 2013-02-13T20:33:53.953 回答
1

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

于 2013-02-13T20:36:19.643 回答