r - 使用两个列表制作矩阵的行和列
问题描述
我正在尝试制作一个矩阵,其中的行和列作为列表 yvars 和 xvars 传递。我将如何在两者之间建立一个矩阵,然后用列和行标题之间的 spearman 相关性 rho(使用 pspearman)填充它。
xvars 和 yvars 是数据集 access_sam2 中列的名称列表。
xvars <- c("Count_iTLS", "Count_iTLS_intra", "Count_iTLS_peri","Count_mTLS", "Count_mTLS_intra", "Count_mTLS_peri","Count_LA", "Count_LA_intra", "Count_LA_peri", "Distance_iTLS", "Distance_iTLS_intra", "Distance_iTLS_peri","Distance_mTLS", "Distance_mTLS_intra", "Distance_mTLS_peri","Distance_LA", "Distance_LA_intra", "Distance_LA_peri", "Area_iTLS", "Area_iTLS_intra", "Area_iTLS_peri","Area_mTLS", "Area_mTLS_intra", "Area_mTLS_peri","Area_LA", "Area_LA_intra", "Area_LA_peri")
yvars<-c("CD8_PD1_D","CD8_PDL1_D","CD8_GBNEG_FOXP3_D")
这是 spearman 相关和访问 rho 系数的代码
x<-spearman.test(access_sam2$x,access_sam2$y)
rho=x[["estimate"]][["rho"]]
解决方案
我们可以用outer
library(pspearman)
f1 <- function(x, y) spearman.test(access_sam2[[x]],
access_same2[[y]])[["estimate"]][["rho"]]
outer(xvars, yvars, FUN = Vectorize(f1))
使用可重现的示例
f2 <- function(x, y) spearman.test(mtcars[[x]],
mtcars[[y]])[["estimate"]][["rho"]]
xvars <- c( "mpg", "cyl", "disp", "hp" )
yvars <- c("drat", "wt" )
out <- outer(xvars, yvars, FUN = Vectorize(f2))
out
# [,1] [,2]
#[1,] 0.6514555 -0.8864220
#[2,] -0.6788812 0.8577282
#[3,] -0.6835921 0.8977064
#[4,] -0.5201250 0.7746767
dimnames(out) <- list(xvars, yvars)