首页 > 解决方案 > 使用两个列表制作矩阵的行和列

问题描述

我正在尝试制作一个矩阵,其中的行和列作为列表 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"]]

标签: r

解决方案


我们可以用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)

推荐阅读