如何从差异向量中轻松创建差异矩阵?

时间:2012-07-15 11:33:58

标签: r

在我的研究中,每个主题都被给予n *(n-1)/ 2个问题,关于他对n = 5个对象之间的不相似性的主观意见(以后用于3向多维尺度)。

我想从10项向量v创建不相似矩阵,例如,以下列方式(对于n = 5):

  1
  2 5
  3 6 8
  4 7 9 10

这是用于实现此特定n的代码示例代码:

dissim<-rep(0,n*n)
dim(dissim)<-c(5,5)
dissim[2,1]<-v[1]
dissim[3,1]<-v[2]
dissim[4,1]<-v[3]
dissim[5,1]<-v[4]
dissim[3,2]<-v[5]
dissim[4,2]<-v[6]
dissim[5,2]<-v[7]
dissim[4,3]<-v[8]
dissim[5,3]<-v[9]
dissim[5,4]<-v[10]

是否有任何实用功能可以帮助任何n?我知道我可以使用两个嵌套循环来完成它,但如果我使用专用函数,代码会更清晰。

也许我会在这个过程中了解另一个有用的库的存在?

2 个答案:

答案 0 :(得分:3)

n <- 5
mat <- matrix(0, ncol = n, nrow = n)
mat[lower.tri(mat)] <- 1:10
mat
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    1    0    0    0    0
[3,]    2    5    0    0    0
[4,]    3    6    8    0    0
[5,]    4    7    9   10    0

答案 1 :(得分:0)

呃......我偶然找到了解决方案。碰巧的是,dist对象的内部结构只是向量v 。那么有用的是:

dissim<-v
class(dissim)='dist'
attr(dissim,"Size")<-5
dissim<-as.dist(dissim)

它现在有效,但我不确定这是否是一种记录的方式,并且始终有效。