在我的研究中,每个主题都被给予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?我知道我可以使用两个嵌套循环来完成它,但如果我使用专用函数,代码会更清晰。
也许我会在这个过程中了解另一个有用的库的存在?
答案 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)
它现在有效,但我不确定这是否是一种记录的方式,并且始终有效。