R中的符号距离矩阵

R中的符号距离矩阵,r,matrix,distance,R,Matrix,Distance,[注意,我写下了这个问题,然后找到了答案。我想可能其他人会想知道,所以我发布了答案以防万一。我不确定这是否是“完成的事情”] 假设我想要向量的有符号距离矩阵,也就是说,距离并不总是正的,但可以是负的。你不能用 区() 因为它返回绝对值 使用应用程序: y<-seq(1:10) distmat<-as.data.frame(apply(as.matrix(y),1,function(x) y-x)) distmat[upper.tri(distmat,diag=TRUE)]<-N

[注意,我写下了这个问题,然后找到了答案。我想可能其他人会想知道,所以我发布了答案以防万一。我不确定这是否是“完成的事情”]

假设我想要向量的有符号距离矩阵,也就是说,距离并不总是正的,但可以是负的。你不能用

区()

因为它返回绝对值

使用应用程序:

y<-seq(1:10)
distmat<-as.data.frame(apply(as.matrix(y),1,function(x) y-x))
distmat[upper.tri(distmat,diag=TRUE)]<-NA

y这里有另一种方法,速度更快,需要更少的内存:

y <- sample (1 : 4)
distmat <- outer (y, y, `-`) 

您也可以将
distmat
作为
replicate(length(y),y)-t(replicate(length(y),y))
获得。此外,您在这里生成的结果可以通过
dist(1:10,method=“manhattan”)
获得,只希望您打算使用中的符号距离定义,在这种情况下,您的内部/外部是什么并不清楚。让我们明确一点:“距离”严格来说是非负的。你是在寻找什么是基本的向量位置(例如(-3,-2)上的点,它与原点的欧几里德距离sqrt(3^2+2^2)?@Arun,但OP特别要求获得负距离的可能性,而
method=“manhattan”
不能满足这一要求(该示例不好,因为它没有显示此要求。@cbeleites,是的,我理解,但最终结果删除了负值。这就是为什么我提到“您在这里生成的结果”…它可能应该是
distmat[lower.tri(distmat,diag=TRUE)]
> distmat
     [,1] [,2] [,3] [,4]  
[1,]    0    1    3    2  
[2,]   -1    0    2    1  
[3,]   -3   -2    0   -1  
[4,]   -2   -1    1    0

## not sure why you want the upper triangular NA
distmat[upper.tri(distmat,diag=TRUE)]<-NA
> as.dist (distmat)
   1  2  3
2 -1      
3 -3 -2   
4 -2 -1  1