向量的简单成对差分

Simple Pairwise Difference of vector

我想计算一个向量的成对差异,我看到人们使用 dist 这里是我正在使用的数据类型的一个例子:

v <- c(1:4)
names(v) <- c('a','b','c','d')
v <- data.frame(t(v))
dist(v)

目前 dist(v) 产生 dist(0),而我期望的是:

 a b c
 b 1    
 c 2 1  
 d 3 2 1

我只想要 dist(v) 的对角线,我知道我可以使用 diag() 函数提取它。如果有一种方法不必使用 diag() 函数,那也很好。

您的代码中的一步太多了,使用它,您会得到想要的结果:

v <- c(1:4)
names(v) <- c('a','b','c','d')
dist(v)
  a b c
  b 1    
  c 2 1  
  d 3 2 1

这是使用 combn

的一种方法
# convert to a vector
vNew <- as.numeric(v[1,])
# calculate pair-wise differences
t(rbind(combn(vNew,2), combn(vNew, 2, FUN=dist)))

    [,1] [,2] [,3]
[1,]    1    2    1
[2,]    1    3    2
[3,]    1    4    3
[4,]    2    3    1
[5,]    2    4    2
[6,]    3    4    1

这里,前两列是向量的元素,第三列是距离。