Data.table 与 cor.test 按组

Data.table with cor.test by group

当我使用 data.table 通过 cor.test 函数计算每个组的相关性时,它适用于默认方法(即 "pearson")但不适用于 "spearman".我收到 data.table 错误。

library("data.table")
dd <- data.table(group=sample(letters[1:3], 50, replace=TRUE), x=rnorm(50), y=rnorm(50))
head(dd)
## group          x            y
## 1:     c  0.1808595  2.124721051
## 2:     a  0.2492086  0.112128546
## 3:     b -1.6392331 -1.823208890
## 4:     c  0.6605648  0.981215691
## 5:     c -0.4625216 -0.008350339
## 6:     b -0.2747395  1.045594928
dd[ , cor.test(x, y), by=group]  # works
dd[ , cor.test(x, y, method="spearman"), by=group]  # does not work
## Error in `[.data.table`(dd, , cor.test(x, y, method = "spearman"), by = group) : 
## Column 2 of j's result for the first group is NULL. [...]

有没有人知道在 data.table 组中使用 cor.test 而不会导致错误的方法?或者,如果这根本不是 data.table 可以修复的任何东西,因为它与这里的 cor.test 的内脏有关,那么使用 spearman 的任何其他可比较的 (data.frame, dplyr) 方式cor.test 按小组行得通?

问题是因为 cor.test for method="spearman" 的列表结果中返回的 parameter 元素是 NULL,导致 data.table 崩溃.

返回的错误消息非常明确地说明了这一点:

Column 2 of j's result for the first group is NULL. [...]

然后从结果中删除第 2 列,您就可以设置了。

dd[ , cor.test(x, y,method="spearman")[-2], by=group]

#   group statistic   p.value   estimate null.value alternative   ...    
#1:     c      2060 0.6263233  0.1043478          0   two.sided   ...
#2:     a       262 0.5762578 -0.1909091          0   two.sided   ...
#3:     b       650 0.5667271 -0.1607143          0   two.sided   ...