【问题标题】:In R, use loop (or while or for) to perfom correlation tests between variables measured at two different times在 R 中,使用循环(或 while 或 for)在两个不同时间测量的变量之间执行相关测试
【发布时间】:2021-10-21 05:09:21
【问题描述】:

我已尝试在此处调整此 code,但它不起作用。

假设我有这个 ds

ds <- data.frame(ige_1 = c(0,1,2,3),
                 ige_2 = c(0,1,2,3),
                 ige_3 = c(0,1,2,3),
                 ige_1_copy = c(1,2,3,4),
                 ige_2_copy = c(1,2,3,4),
                 ige_3_copy = rep(c(1,2,3,4),100))

copy 表示该变量是在另一天测量的。我的兴趣是专门在这些变量之间执行相关性。因此,我可以这样做:

cor(ds$ige_1, ds$ige_1_copy)
cor(ds$ige_2, ds$ige_2_copy)
cor(ds$ige_3, ds$ige_3_copy)

但是,我想让这更容易,但我的循环不起作用。

for (i in 1:4) {
  cor(ds$ige_[[i]], ds_ige_[[i]]_copy, use = "complete.obs")
}

有什么建议吗? R base 或 R tidyverse 将不胜感激。

完整代码

ds <- data.frame(ige_1 = c(0,1,2,3),
                 ige_2 = c(0,1,2,3),
                 ige_3 = c(0,1,2,3),
                 ige_1_copy = c(1,2,3,4),
                 ige_2_copy = c(1,2,3,4),
                 ige_3_copy = rep(c(1,2,3,4),100))

cor(ds$ige_1, ds$ige_1_copy)
cor(ds$ige_2, ds$ige_2_copy)

for (i in 1:4) {
  cor(ds$ige_[[i]], ds_ige_[[i]]_copy, use = "complete.obs")
}

【问题讨论】:

    标签: r loops for-loop while-loop tidyverse


    【解决方案1】:

    也许这就是你想要的?

    ds <- data.frame(ige_1 = c(0,1,2,3),
                 ige_2 = c(0,1,2,3),
                 ige_3 = c(0,1,2,3),
                 ige_1_copy = c(1,2,3,4),
                 ige_2_copy = c(1,2,3,4),
                 ige_3_copy = rep(c(1,2,3,4),100))
    
    cor_var <- numeric()
    for (i in 1:3) {
        cor_var[i] <- cor(ds[[paste("ige",i, sep = "_")]],
                          ds[[paste("ige",i,"copy", sep = "_")]], 
                          use = "complete.obs")
    }
    
    cor_var
    

    您也可以在 for 循环中使用“打印”,而不是将其存储在变量中。

    【讨论】:

      【解决方案2】:

      您也可以只做cor(ds) 来获取所有组合:

      ds <- data.frame(ige_1 = c(0,1,2,3),
                       ige_2 = c(0,1,2,3),
                       ige_3 = c(0,1,2,3),
                       ige_1_copy = c(1,2,3,4),
                       ige_2_copy = c(1,2,3,4),
                       ige_3_copy = rep(c(1,2,3,4),100))
      
      
      
      cor(ds)
      

      结果:

                 ige_1 ige_2 ige_3 ige_1_copy ige_2_copy ige_3_copy
      ige_1          1     1     1          1          1          1
      ige_2          1     1     1          1          1          1
      ige_3          1     1     1          1          1          1
      ige_1_copy     1     1     1          1          1          1
      ige_2_copy     1     1     1          1          1          1
      ige_3_copy     1     1     1          1          1          1
      

      【讨论】:

      • 谢谢,但是这个输出返回了一些不需要的相关性(例如 ige_1 与 ige_2)。
      • 是的,但您没有指定想要感兴趣的相关性。如果你例如仅将相关性用于手动检查,比这种方法更清洁,并且比循环留出更少的错误空间。但是,如果您以编程方式需要它们,它当然不适合直接使用,这是真的。
      • 你是对的。我将编辑问题以使其清楚。谢谢
      猜你喜欢
      • 2018-04-14
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多