【问题标题】:Naming output of a for loop for linear regression为线性回归命名 for 循环的输出
【发布时间】:2014-03-05 15:04:04
【问题描述】:

对于以下代码的任何帮助,我将不胜感激。我编写了一个代码来通过重复数据集拟合线性回归线(单独并根据每个患者 ID)。我真正想要的是能够提取 p 值高于 0.05 的名称/id。

id <- c("A1", "A1","A1", "B10", "B10", "B10","B10", "B10", "C100", "C100", "C100", 
"G100", "G100", "G100")

weight <- rnorm(14, 70) 

height <- rnorm(14, 1.7)

A <- data.frame(id, weight, height) 


model1 <-function(weight, height){
anything<-lm(weight~height)
res<-round(summary(anything)$coefficients[, 4], 3)
res
}


model2<-function(weight,height){
res<-c()
for(i in unique(A$id)){
    res2<-model1(A[A$id == i,]$weight, A[A$id == i,]$height)
    res<-c(res,res2)
}

res
 }

现在的问题是我想根据数据框 A(即 A1、B10、C100 和 G100)中给出的 id 来命名输出(res)。我试过添加names(res) &lt;- unique(A$id),但这并没有给我我真正想要的东西。请注意,我对编写循环不是很有经验,所以任何改进我的代码的建议都将受到热烈欢迎。 我希望这个问题足够清楚,但如果不是,我很乐意回答任何问题。

【问题讨论】:

    标签: r for-loop regression


    【解决方案1】:

    c() 可以接受命名输入。例如,如果我想创建一个名称为 xy 的向量,我可以这样做:

    c(x = 1, y = 2)
    

    在你的情况下,当你附加 res2 时,你会命名它:

    res <- c(res, name = res2)
    

    name 是你想给它起的名字。

    请注意,在循环之前预分配向量会更有效。

    【讨论】:

    • 感谢您的回答。如何确保将 A$id 中的名称标记到结果中?请注意,我的原始数据比这大得多,所以我无法手动完成。
    • 为这样的结果初始化/预分配容器:ids &lt;- unique(A$id); res &lt;- vector(length(ids), mode="list"); names(res) &lt;- ids;然后在循环中执行res[[i]] &lt;- model1(A....
    • @fabians,您的建议非常有效——正是我想要的。非常感谢,你真的让我很开心!
    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2021-09-14
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多