在R中创建特定类的对象

时间:2013-02-13 20:26:56

标签: r

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

2 个答案:

答案 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对象内部。这样,datapredict等方法更有可能正常工作......