我有一个回归模型列表,它们都具有相同数量的术语(即相同数量的预测变量)。实质上,他们都有不同的模型术语是对的。但是当把它们放在回归表中时,我希望它们所有模型共享一个公式,只是为了呈现。
一些指示性数据
library(plyr)
d1 <- data.frame(y = rnorm(100),
x1 = runif(100),
x2 = runif(100),
x3 = runif(100),
x4 = runif(100))
适合模特
mods.form <- paste("y ~ x", 1:4, sep = "")
mod.list <- llply(mods.form, function(i) lm(i, d1))
以下是我想要修改的术语
llply(mod.list, function(i) attr(terms(i), "variables"))
[[1]]
list(y, x1)
[[2]]
list(y, x2)
[[3]]
list(y, x3)
[[4]]
list(y, x4)
我希望列表中的每个模型都具有与第一个模型相同的变量名称,所以我尝试了:
mod.list2 <- llply(mod.list, function(i) attr(terms(i), "variables") = list("y", "x1"))
提供此错误
Error in attr(terms(i), "variables") = list("y", "x1") :
could not find function "terms<-"
这里有一个简单的解决方案吗?
答案 0 :(得分:3)
也许这就是你要找的东西:
使用您提供的数据框
d1 <- data.frame(y = rnorm(100),
x1 = rnorm(100),
x2 = rnorm(100),
x3 = rnorm(100),
x4 = rnorm(100))
首先,将每个x变量重命名为某个所需名称“x”
names(d1) <- c("y", rep("x", times=length(d1)-1))
然后,对每个x变量使用列表d1上的lapply,将y作为参数传递 进入匿名函数
mod.list <- lapply(d1[2:ncol(d1)], function(x,y){
lm("y ~ x",d1)
}, y=d1[, 'y'])
最后,我们在mod.list上调用llply:
> llply(mod.list, function(x){
+ attr(terms(x), "variables")
+ })
$x
list(y, x)
$x.1
list(y, x)
$x.2
list(y, x)
$x.3
list(y, x)