为列表中的每个数据框调整方法 cor.test

Adapt method cor.test for each data frame in a list

我想在 R 中为数据帧列表中的每个数据帧调整 cor.test 中的方法。

data(iris)
iris.lst <- split(iris[, 1:2], iris$Species)
options(scipen=999)

normality1 <- lapply(iris.lst, function(x) shapiro.test(x[,1]))
p1 <- as.numeric(unlist(lapply(normality1, "[", c("p.value"))))
normality2 <- lapply(iris.lst, function(x)shapiro.test(x[,2]))
p2 <- as.numeric(unlist(lapply(normality2, "[", c("p.value"))))
try <- ifelse (p1 > 0.05 | p2 > 0.05, "spearman", "pearson")

# Because all of them are spearman:
try[3] <- "pearson"
for (i in 1: length(try)){
   results.lst <- lapply(iris.lst, function(x) cor.test(x[, 1], x[, 2], method=try[i]))
   results.stats <- lapply(results.lst, "[", c("estimate", "conf.int", "p.value"))
   stats <- do.call(rbind, lapply(results.stats, unlist))
   stats
}

但它不会为每个数据帧单独计算 cor.test...

cor.test(iris.lst$versicolor[, 1], iris.lst$versicolor[, 2], method="pearson")`
stats
# Should be spearman corr.coefficient but is pearson

有什么建议吗?

让我检查一下我是否理解您想要实现的目标。您有一个数据框列表和一个要应用的相应方法列表(每个数据框一个方法)。 如果我的假设是正确的,那么你需要做这样的事情(而不是你的 for 循环):

for (i in 1: length(try)){
  results.lst <- cor.test(iris.lst[[i]][, 1], iris.lst[[i]][, 2], method=try[i])
  print(results.lst)
}

编辑: 获取统计数据的方法有很多种,这里是一种方法。但首先要注意几点:

  • 我会找到一种方法来确保我对正确的数据集使用正确的方法,接下来我将使用命名列表。
  • 据我所知,只有“pearson”方法有置信区间,我们在创建统计数据时必须处理它,或者您可以只查看 p 值和估计值。
  • 我们将使用 sapply 而不是 for 循环来立即获取统计数据作为 table,并且
  • 函数 t 转置 table
names(try) <- names(iris.lst)
t(
  sapply(names(try), 
       function(i) {
         result <- cor.test(iris.lst[[i]][, 1], iris.lst[[i]][, 2], method=try[[i]])
         to_return <- result[c("estimate", "p.value")]
         to_return["conf.int1"] <- ifelse(is.null(result[["conf.int"]]), NA, result[["conf.int"]][1])
         to_return["conf.int2"] <- ifelse(is.null(result[["conf.int"]]), NA, result[["conf.int"]][2])
         return(to_return)
         }
       )
  )

输出:

           estimate  p.value           conf.int1 conf.int2
setosa     0.7553375 0.000000000231671 NA        NA       
versicolor 0.517606  0.0001183863      NA        NA       
virginica  0.4572278 0.0008434625      0.2049657 0.6525292