【问题标题】:do pairwise comparisons between all possible combinations在所有可能的组合之间进行成对比较
【发布时间】: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


【解决方案1】:

我刚刚做了几乎完全相同的事情,除了余弦相似度或相关性:

set.seed(255)
mydata<-data.frame(matrix(rnorm(400), nrow = 20))
## 20x20 matrix

choices<-choose(20,2) #20 choose 2 possible pairs
combs<-combn(20,2) # create those pairs

COR<-NULL
A<-NULL
B<-NULL

  for(i in 1:choices) {
    nums<-combs[,i]
    COR[i]<-cor(mydata[,nums[1]], mydata[,nums[2]])
    A[i]<-nums[1]
    B[i]<-nums[2]
  }

COR.data<-data.frame(A,B,COR) #create a data.frame with the results
head(COR.data, 5)

A B       COR
1 2  0.246464
1 3  0.209621
1 4 -0.273593
1 5  0.380731
1 6  0.008158

在生成的data.frame 列中,A 和 B 列是比较的 mydata 对象的列。

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 2020-09-23
    • 2018-07-26
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多