【发布时间】:2023-04-03 06:22:02
【问题描述】:
我有一个矩阵,我想在所有可能的组合(唯一)之间进行成对比较:
data.frame
A B C D
a 2 0 2 50
b 1 3 1 2
c 4 6 7 50
d 1 3 8 2
... ... ... ... ...
library(utils)
combined <- combn(samples,2,simplify = FALSE)
combined
[[1]]
[1] "A" "B"
[[2]]
[1] "A" "C"
...
par(mfrow=c(2,2))
for(i in 1:length(combined)){
cor <- sprintf(cor(dat$combined[[i]][1],dat$combined[[i]] [2]),fmt='%#.2g',method="spearman")
smoothScatter (
dat$combined[[i]][1],
dat$combined[[i]][2],
main=paste0("Spearman= ",cor),
)
}
dev.off()
但我收到以下错误:
Error in cor(dat$combined[[i]][1], dat$combined[[i]][2]) :
supply both 'x' and 'y' or a matrix-like 'x'
【问题讨论】:
-
您说
matrix,但您尝试访问行和列,就好像它是一个数据框一样。xm = matrix(1:4, 2); xdf = as.data.frame(xm);看看xm[[1]]和xdf[[1]]的区别。 -
我建议将
i设置为 1 并尝试在循环中运行越来越小的代码,直到找到问题 - 与您期望的不同。例如,dat$combined[[i]][1]使它看起来像dat是一个数据框,其中有一个名为combined的列,它恰好是一列列表(因为否则你为什么要使用[[来访问列),您需要第一个列表的第一个元素。这听起来不像你展示的dat。 -
好的,那么你需要
dat[[combined[[i]][1]]],因为$不能用于存储在变量中的字符串列名。 -
@Gregor 非常感谢。它有效:)
标签: r