我有一个矩阵,我想在所有可能的组合之间进行成对比较(唯一):
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'
答案 0 :(得分:0)
我刚刚做了几乎完全相同的事情,除了余弦相似性或相关性:
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
对象的列。