对于100个数据集中的每一个,我使用lm()
生成7个不同的方程式,并希望提取和比较p值和调整后的R平方值。
请假设lm()
实际上是此方案可能的最佳回归技术。
在搜索网络时,我发现了一些有用的示例,说明如何创建一个将提取此信息并将其写入其他地方的函数,但是,我的代码使用paste()
来标记每个函数。数据源,我无法弄清楚如何在我创建的函数中包含这些唯一的粘贴名称。
这是一个小例子:
temp <- data.frame(labels=rep(1:10),LogPre= rnorm(10))
temp$labels2<-temp$labels^2
testrun<-c("XX")
for (i in testrun)
{
assign(paste(i,"test",sep=""),lm(temp$LogPre~temp$labels))
assign(paste(i,"test2",sep=""),lm(temp$LogPre~temp$labels2))
}
然后我想提取每个方程的系数
但以下不起作用:
summary(paste(i,"test",sep="")$coefficients)
,这也不是:
coef(summary(paste(i,"test",sep="")))
两者都产生错误:$运算符对原子向量无效 即使
summary(XXtest)$coefficients
和
coef(summary(XXtest))
工作得很好。
如何在paste()
中使用summary()
来允许我为AAtest,AAtest2,ABtest,ABtest2等执行此操作。
谢谢!
答案 0 :(得分:3)
仅使用paste
会产生字符串,而不是具有该名称的对象。您需要告诉R使用get
获取具有该名称的对象。
summary(get(paste(i,"test",sep="")))$coefficients
答案 1 :(得分:3)
很难准确说出你的目的是什么,但某种应用循环可能会以更简单的方式做你想要的。也许是这样的?
temp <- data.frame(labels=rep(1:10),LogPre= rnorm(10))
temp$labels2<-temp$labels^2
testrun<-c("XX")
names(testrun) <- testrun
out <- lapply(testrun, function(i) {
list(test1=lm(temp$LogPre~temp$labels),
test2=lm(temp$LogPre~temp$labels2))
})
然后获取斜坡的所有p值:
> sapply(out, function(i) sapply(i, function(x) coef(summary(x))[2,4]))
XX
test1 0.02392516
test2 0.02389790