2012-07-15 177 views
0

在我的研究中,每个科目都有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 +我知道我可以使用两个嵌套循环来完成它,但是如果我使用了专用函数,代码会更清晰。

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

回答

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 
+0

这对我自己的解决方案更好,因为它不依赖于对象的内部结构。谢谢! – 2012-07-15 11:46:50

0

呃......偶然我自己找到了解决方案。碰巧,dist对象的内部结构是,只是矢量v。那么,什么工作原理是:

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

它现在,但我不知道这是一个记录的方式,将永远是有效的。

+0

这取决于你将如何使用它,因为'as.matrix(dissim)'显示完整的矩阵,它不是你需要的矩阵,即距离矩阵是对称的,只打印下面的三角形就足够了。 – Julius 2012-07-15 12:12:37