R 如何基于行名和列名的比较构建方形矩阵

R 如何基于行名和列名的比较构建方形矩阵,r,matrix,R,Matrix,我的矩阵中的列和行的名称与组相关,这些组与其他组具有不同的关系。我想创建一个矩阵,其中的值基于行和列名以及相应的关系 我已经创建了一个低效的方法来实现这一点,这对于小的3*3矩阵是可以的,但是对于大的矩阵是不实用的 我的示例数据如下: tom <- data.frame("w"=c(7,1,2),"x"=c(2,4,4),"y"=c(12,4,8)) row.names(tom) <- colnames(tom) same <- data.frame("trait"=c("w

我的矩阵中的列和行的名称与组相关,这些组与其他组具有不同的关系。我想创建一个矩阵,其中的值基于行和列名以及相应的关系

我已经创建了一个低效的方法来实现这一点,这对于小的3*3矩阵是可以的,但是对于大的矩阵是不实用的

我的示例数据如下:

tom <- data.frame("w"=c(7,1,2),"x"=c(2,4,4),"y"=c(12,4,8))
row.names(tom) <- colnames(tom)

same <- data.frame("trait"=c("w","x","y"),
                   "group"=c(1,2,2),
                   "own_group_relationship"=c(0.86,0.55,0.55))

diff <- data.frame("trait"=c("w","x","y"),
                    "diff_group_relationship"=c(0.23,0.23,0.23))

tom这里有一个使用
outer
match
的解决方案:

outer(rownames(tom), colnames(tom),
      FUN=function(x, y) {
                          (x==y) * same$own_group_relationship[match(x, same$trait)] +
                          (x!=y) * diff$diff_group_relationship[match(x, diff$trait)]
      })
返回

     [,1] [,2] [,3]
[1,] 0.86 0.23 0.23
[2,] 0.23 0.55 0.23
[3,] 0.23 0.23 0.55

内部函数生成一个向量,该向量将根据行名和列名是否匹配来提取正确的值。
outer
函数返回正确的位置和尺寸。

下面是一个使用
outer
match
的解决方案:

outer(rownames(tom), colnames(tom),
      FUN=function(x, y) {
                          (x==y) * same$own_group_relationship[match(x, same$trait)] +
                          (x!=y) * diff$diff_group_relationship[match(x, diff$trait)]
      })
返回

     [,1] [,2] [,3]
[1,] 0.86 0.23 0.23
[2,] 0.23 0.55 0.23
[3,] 0.23 0.23 0.55

内部函数生成一个向量,该向量将根据行名和列名是否匹配来提取正确的值。
outer
函数返回正确的位置和尺寸。

您不能只使用
vec之类的工具吗
     [,1] [,2] [,3]
[1,] 0.86 0.23 0.23
[2,] 0.23 0.55 0.23
[3,] 0.23 0.23 0.55