将距离向量转换为R中距离对象的有效方法(理想情况下无需创建完整的距离矩阵)

将距离向量转换为R中距离对象的有效方法(理想情况下无需创建完整的距离矩阵),r,matrix,vector,distance,R,Matrix,Vector,Distance,我有一个距离向量,我从其他程序中得到,我想把它转换成R语言中的dist对象 下面我给出一个这样一个向量的例子:distVector的计算方法与上述其他过程计算距离向量的方法相同。理想情况下,我希望在不浪费资源的情况下将此向量转换为距离矩阵(distobject) 我想我可以把它转换成一个矩阵,把它复制成上三角矩阵和下三角矩阵,把对角线设置为0,然后处理这样一个事实,即与dist对象结构相比,它有点像倒置的(比较下面的输出)。再一次,首先创建一个完整的矩阵,然后(可能?)在dist对象中将其再次缩

我有一个距离向量,我从其他程序中得到,我想把它转换成
R
语言中的
dist
对象

下面我给出一个这样一个向量的例子:
distVector
的计算方法与上述其他过程计算距离向量的方法相同。理想情况下,我希望在不浪费资源的情况下将此向量转换为距离矩阵(
dist
object)

我想我可以把它转换成一个矩阵,把它复制成上三角矩阵和下三角矩阵,把对角线设置为0,然后处理这样一个事实,即与
dist
对象结构相比,它有点像
倒置的
(比较下面的输出)。再一次,首先创建一个完整的矩阵,然后(可能?)在
dist
对象中将其再次缩减为向量,这对我来说似乎是浪费。有更好的办法吗

示例代码(注意:我无法更改
distVector
的计算方式):

非常感谢,,
托马斯。

创建矩阵对我来说似乎是合理的<这是一个简短而漂亮的答案。我还不熟悉
R
。我想知道这个的内存消耗是多少?这会创建一个完整的mm矩阵,用我的数据填充它的下三角,然后在我随后的
as.dist
调用中再次提取这个下三角吗?或者它只是为mm矩阵或其他东西创建了一个空容器,而不消耗太多内存?不管怎样,你的方法对我来说似乎是可行的。谢谢^ ^对不起,我不知道R的内存使用/对象复制等情况。有相当多的问题,所以我们已经看了这些东西虽然-是我的第一次搜索命中。。可能是useful@user20650:啊,那太多了。好吧,除非有一个更简单的,非矩阵创建的解决方案,我会接受你的建议,因为它是非常紧凑的代码。如果明天之前没有非矩阵创建解决方案出现,如果您愿意,可以复制粘贴您的评论作为答案,我将接受。(基本上,这是一个答案。)@user20650:注意,标题已更改。再次感谢。创建矩阵对我来说似乎是合理的<这是一个简短而漂亮的答案。我还不熟悉
R
。我想知道这个的内存消耗是多少?这会创建一个完整的mm矩阵,用我的数据填充它的下三角,然后在我随后的
as.dist
调用中再次提取这个下三角吗?或者它只是为mm矩阵或其他东西创建了一个空容器,而不消耗太多内存?不管怎样,你的方法对我来说似乎是可行的。谢谢^ ^对不起,我不知道R的内存使用/对象复制等情况。有相当多的问题,所以我们已经看了这些东西虽然-是我的第一次搜索命中。。可能是useful@user20650:啊,那太多了。好吧,除非有一个更简单的,非矩阵创建的解决方案,我会接受你的建议,因为它是非常紧凑的代码。如果明天之前没有非矩阵创建解决方案出现,如果您愿意,可以复制粘贴您的评论作为答案,我将接受。(基本上,这是一个答案。)@user20650:注意,标题已更改。再次感谢。
rawData<-matrix(c(1,1,1,1.1,1,1,1,1,1.2,2,2,2,2.2,2,2,2,2.2,2.2,3,3,3,3.4,3,3),ncol=3,byrow=TRUE);

distVector<-integer(0);
for(i in 1:dim(rawData)[1]) {
  for(j in (i+1):dim(rawData)[1]) {
    a <- (rawData[i,]-rawData[j,]);
    distVector <- c(distVector, sqrt(a %*% a));
  }
}

print(distVector)
print(dist(rawData))
> print(distVector)
 [1] 0.1000000 0.2000000 1.7320508 1.8547237 1.9697716 3.4641016 3.7094474 0.2236068 1.6763055
[10] 1.7916473 1.9209373 3.4073450 3.6455452 1.6248077 1.7549929 1.8547237 3.3526109 3.6055513
[19] 0.2000000 0.2828427 1.7320508 1.9899749 0.3464102 1.6248077 1.8547237 1.5099669 1.8000000
[28] 0.4000000

> print(dist(rawData))
          1         2         3         4         5         6         7
2 0.1000000                                                            
3 0.2000000 0.2236068                                                  
4 1.7320508 1.6763055 1.6248077                                        
5 1.8547237 1.7916473 1.7549929 0.2000000                              
6 1.9697716 1.9209373 1.8547237 0.2828427 0.3464102                    
7 3.4641016 3.4073450 3.3526109 1.7320508 1.6248077 1.5099669          
8 3.7094474 3.6455452 3.6055513 1.9899749 1.8547237 1.8000000 0.4000000