R sapply函数ifelse变量比较

R sapply函数ifelse变量比较,r,function,variables,matrix,R,Function,Variables,Matrix,我试着用sapply和functionx,y来循环我的矩阵 test<-sapply(colnames(my_mat), function(x, y) ifelse (x==y,-1,cor(test_mat[,x],test_mat[,y], use="p")) ) 我想要对角线上的-1 我得到一个错误,说x==y中的error:'y'丢失,但是如果我删除ifelse,代码工作正常,尽管对角线中有1,而不是-1。有什么想法吗 谢谢。cor是矢量化的,并且有一个矩阵的方法,所以要实现这一

我试着用sapply和functionx,y来循环我的矩阵

test<-sapply(colnames(my_mat), function(x, y) ifelse (x==y,-1,cor(test_mat[,x],test_mat[,y], use="p")) )
我想要对角线上的-1

我得到一个错误,说x==y中的error:'y'丢失,但是如果我删除ifelse,代码工作正常,尽管对角线中有1,而不是-1。有什么想法吗

谢谢。

cor是矢量化的,并且有一个矩阵的方法,所以要实现这一点,您真正需要做的就是计算矩阵与自身的相关性,从而给出每列之间的相关性。注意矩阵是对称的。然后使用diag将对角线元素设置为-1


谢谢,正是我想要的。
   A B C
A  . . .
B  . . .
C  . . .
set.seed(1)
m <- matrix( rnorm(25) , 5 )
#           [,1]       [,2]       [,3]        [,4]        [,5]
#[1,] -0.6264538 -0.8204684  1.5117812 -0.04493361  0.91897737
#[2,]  0.1836433  0.4874291  0.3898432 -0.01619026  0.78213630
#[3,] -0.8356286  0.7383247 -0.6212406  0.94383621  0.07456498
#[4,]  1.5952808  0.5757814 -2.2146999  0.82122120 -1.98935170
#[5,]  0.3295078 -0.3053884  1.1249309  0.59390132  0.61982575


cor.mat <- cor( m )
diag(cor.mat) <- -1
#           [,1]       [,2]       [,3]       [,4]       [,5]
#[1,] -1.0000000  0.2789049 -0.6149659  0.2491625 -0.7615458
#[2,]  0.2789049 -1.0000000 -0.7864121  0.5683647 -0.5313192
#[3,] -0.6149659 -0.7864121 -1.0000000 -0.6813702  0.9353307
#[4,]  0.2491625  0.5683647 -0.6813702 -1.0000000 -0.6429515
#[5,] -0.7615458 -0.5313192  0.9353307 -0.6429515 -1.0000000
cor( m[,1] , m )
#     [,1]      [,2]       [,3]      [,4]       [,5]
#[1,]    1 0.2789049 -0.6149659 0.2491625 -0.7615458