首页 > 解决方案 > cor.test 的奇怪问题——去掉结果中的 [[1]]、[[2]] 等

问题描述

我编写了以下函数来在一个变量与给定变量列表之间进行成对相关。

myCortest <- function(dat, mainVar, varlist) {
  foo <- lapply(varlist, function(x){
    foo1 <- cor.test(get(mainVar, as.environment(dat)),
                     get(x, as.environment(dat)))
    data.frame(var1 = mainVar, var2 = x,
               R = foo1$estimate, p = foo1$p.value)
  })
  foo
}

它工作,有点。结果之间有奇怪的 [[1]], [[2]] ,如下所示:

myCortest(chol, "wt", c("age", "chol", "tg", "ht"))
[[1]]
    var1 var2         R            p
cor   wt  age 0.6660014 5.631448e-26

[[2]]
    var1 var2          R        p
cor   wt chol 0.06076105 0.404971

[[3]]
    var1 var2        R            p
cor   wt   tg 0.294617 3.688497e-05

[[4]]
    var1 var2         R            p
cor   wt   ht 0.8558331 2.705222e-56

我似乎无法弄清楚是什么导致括号中的数字上升。我想摆脱他们。有任何想法吗?

标签: rfunctioncorrelation

解决方案


它是list循环的输出lapplylapply总是返回 a list)。我们可以rbindlist元素添加到单个数据集do.call

out1 <- do.call(rbind, out)

在哪里

out <- myCortest(chol, "wt", c("age", "chol", "tg", "ht"))

更好的选择是更改功能“myCortest”以返回rbinded 输出

myCortest <- function(dat, mainVar, varlist) {
  foo <- lapply(varlist, function(x){
    foo1 <- cor.test(get(mainVar, as.environment(dat)),
                     get(x, as.environment(dat)))
    data.frame(var1 = mainVar, var2 = x,
               R = foo1$estimate, p = foo1$p.value)
  })
  do.call(rbind, foo)
}

推荐阅读