首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中创建特定类的对象

在R中创建特定类的对象
EN

Stack Overflow用户
提问于 2013-02-14 04:26:56
回答 2查看 121关注 0票数 1

函数lm(...)返回'lm‘类的对象。如何创建此类对象的数组?我想做以下几件事:

代码语言:javascript
运行
复制
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‘类型的对象数组。我该怎么做?

EN

回答 2

Stack Overflow用户

发布于 2013-02-14 04:33:54

不确定它是否会回答您的问题,但如果您想要做的是对数据框的不同列运行来自一个变量的一系列lm,您可以这样做:

代码语言:javascript
运行
复制
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类的元素列表。

票数 2
EN

Stack Overflow用户

发布于 2013-02-14 04:36:20

您可以创建一个空的/无意义的lm对象数组,如下所示:

代码语言:javascript
运行
复制
z <- NA
class(z) <- "lm"
lm_array <- replicate(20,z,simplify=FALSE)

但这可能不是解决问题的最好方法。您只需创建一个具有适当长度(vector("list",20))的空列表并填充元素即可:R是弱类型的,因此它不会介意您将NULL值替换为lm对象。不过,更贴切地说,您可以在预测器名称列表上运行lapply

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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对象内部提取模型中的所有变量。这样,像predictupdate这样的方法更有可能正确工作……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14862465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档