从多个 cor.test() 中提取估计值和 P 值导致 R

Extracting Estimate and P-value from multiple cor.test() results in R

我有一个 Excel 工作簿,其中有 54 个 sheet。每个 sheet 代表一个国家,是一个 17 x 11 矩阵,其中行是年份,列是经济变量。

我可以使用 readxl 包将 Excel 工作簿导入 R。

sheet_list <- lapply(1:54, function(i) read_excel("FDI-vs-variables.xlsx", sheet = i, na="NA"))

我的数据现在以数据框列表的形式存在,sheet_list,其中每个数据框代表我工作簿中的一个 sheet。

接下来,我想 运行 对所有 sheets/dataframes 中我想要的两个变量进行相关性测试。

例如,所有 sheets/dataframes 中的第三列是 GDP,第八列是营养不良人口的百分比。我可以编写一个函数,使用该数据在 sheet/dataframe 和 运行 中获取相应的列进行相关测试。

dfCorTest <- function(df){
  rslt <- cor.test(df[[3]],df[[8]], method="kendall",use="pairwise")
  return(rslt)
}

然后我使用 lapply 将该函数应用于我的 54 sheets/dataframes 列表中的每个 sheet/dataframe。

cor_results <- lapply(sheet_list, dfCorTest)

这会产生一个列表列表,cor_results,详细说明了 54 个不同的 cor.test 的结果运行秒。

如何从此列表列表中仅提取相关估计值 (tau) 和 p 值?

我知道你可以使用$estimate$p.value调用cor.test的具体结果,我可以在cor_results 列表如下:

cor_results[[1]]$estimate
cor_results[[1]]$p.value
cor_results[[2]]$estimate
cor_results[[2]]$p.value
...and so on

但是这样做的有效方法是什么?理想情况下,我希望能够写出输出类似于

的文本文件
SheetNo    Estimate    P-value
1          3.33        0.054
2          -2.76       0.889
...        ...         ...
54         1.23        0.007

我知道 中也有人问过类似的问题,但他们使用 for 循环 而不是 lapply 到 运行 多重相关测试,我似乎无法计算出等效代码。

UPDATE/EDIT

下面用户 Parfait 建议的答案有效(谢谢!)。修改函数返回的内容以及 sapplytranspose 的组合:

dfCorTest <- function(df){
  rslt <- cor.test(df[[3]], df[[8]], method="kendall", use="pairwise")

  return(c(estimate = rslt$estimate,
           p.value = rslt$p.value))
}

cor_results <- t(sapply(sheet_list, dfCorTest))

考虑使用 sapply 作为相关结果的矩阵输出(即 s 简化版本),并调整 return 对象和转置, t(), 最后:

dfCorTest <- function(df){
  rslt <- cor.test(df[[3]], df[[8]], method="kendall", use="pairwise")

  return(c(estimate = rslt$estimate,
           p.value = rslt$p.value))
}

cor_results <- t(sapply(sheet_list, dfCorTest))

Rextester Demo