前言
今天想跟大家分享一个可以用来给相关性矩阵排序的R包——lessR。该R包封装了很多R基础函数,一个函数可以相当于几个普通函数的功能。这里不介绍其他的函数功能,感兴趣的可以自己去查阅文档。主要说一下它的corReorder函数,这个函数本身是用来画相关性热图的,但它可以给热图自定义排列的顺序,并且可以返回排序的矩阵,这个功能还是挺实用的。如果给矩阵按行或者按列排序都是挺简单的事,但是如果想把行和列关联起来给一个二维的相关性矩阵排列顺序可不是一件那么容易的事情。
这个函数使用起来也是相当的简单,下面来看看具体的使用方法:
>library(lessR)
>mycor <- cor(mtcars)
>head(mycor)
mpg cyl disp hp drat wt
mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.6811719 -0.8676594
cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.6999381 0.7824958
disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.7102139 0.8879799
hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.4487591 0.6587479
drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.0000000 -0.7124406
wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.7124406 1.0000000
qsec vs am gear carb
mpg 0.41868403 0.6640389 0.5998324 0.4802848 -0.5509251
cyl -0.59124207 -0.8108118 -0.5226070 -0.4926866 0.5269883
disp -0.43369788 -0.7104159 -0.5912270 -0.5555692 0.3949769
hp -0.70822339 -0.7230967 -0.2432043 -0.1257043 0.7498125
drat 0.09120476 0.4402785 0.7127111 0.6996101 -0.0907898
wt -0.17471588 -0.5549157 -0.6924953 -0.5832870 0.4276059
#下面来给上面的相关性矩阵排个顺序,这里只替换‘mpg’、‘cyl’的顺序
>remat <- corReorder(mycor,vars=c(2,1,3,4,5,6,7,8,9,10,11),heat_map=F)
>head(remat)
cyl mpg disp hp drat wt
cyl 1.0000000 -0.8521620 0.9020329 0.8324475 -0.6999381 0.7824958
mpg -0.8521620 1.0000000 -0.8475514 -0.7761684 0.6811719 -0.8676594
disp 0.9020329 -0.8475514 1.0000000 0.7909486 -0.7102139 0.8879799
hp 0.8324475 -0.7761684 0.7909486 1.0000000 -0.4487591 0.6587479
drat -0.6999381 0.6811719 -0.7102139 -0.4487591 1.0000000 -0.7124406
wt 0.7824958 -0.8676594 0.8879799 0.6587479 -0.7124406 1.0000000
qsec vs am gear carb
cyl -0.59124207 -0.8108118 -0.5226070 -0.4926866 0.5269883
mpg 0.41868403 0.6640389 0.5998324 0.4802848 -0.5509251
disp -0.43369788 -0.7104159 -0.5912270 -0.5555692 0.3949769
hp -0.70822339 -0.7230967 -0.2432043 -0.1257043 0.7498125
drat 0.09120476 0.4402785 0.7127111 0.6996101 -0.0907898
wt -0.17471588 -0.5549157 -0.6924953 -0.5832870 0.4276059
使用corReorder给矩阵排序时,需要给定一个排序向量(这里为c(2,1,3,4,5,6,7,8,9,10,11))分别来代表一个相关性变量,向量的位置就代表了排序后的位置,heat_map默认是开启的,也就是会画一个相关性热图,我这里只是用来排序矩阵,所以关闭了,这个开不开启没有什么影响。最重要的是一定要赋值给一个变量,否则是不返回排序后的向量。现在是不是觉得使用起来相当简单。
这个函数虽然用起来挺简单的,但是有一个需要注意的点,就是这个函数不能用在自定函数里面,在自定义函数里面它接受不到实参,下面来演示一下具体是怎么回事:
# 自定义一个函数
>test <- function(mat,odrnum){remat <- corReorder(mat,vars=odrnum);return(remat)}
# 定义排列顺序
>odrnum <- c(2,1,3,4,5,6,7,8,9,10,11)
# 调用函数
>test(mycor,odrnum)
Error:
------
No correlation matrix entered.
No object called mat exists.
Either enter the correct name, or calculate with: Correlation
Or read the correlation matrix with: corRead
从上面调用函数报的错可以看出矩阵根本没有传递给corReorder函数,所以大家需要使用的时候一定要注意,不然搞不清状况还以为自己写的自定义函数有问题,浪费时间有徒劳无功。对于这个问题,我已经发邮件给作者,希望能弄清楚到底是什么情况,后续可以解决这个问题。
最后
corReorder函数给矩阵自定义排序,这个功能真的很实用,希望作者后面可以将它完善一下就更好了。emm,今天就分享到这里了。
网友评论