R中的dist()函数输出什么?

4
我很好奇dist()函数的输出结果。更具体地说,如果我尝试:
a=matrix(rnorm(1:100),nrow=10)
dist(a)

好的,我得到了我期望的内容。

          1        2        3        4        5        6        7        8        9
2  3.700582                                                                        
3  3.793826 4.391523                                                               
4  3.063703 5.386797 5.494179                                                      
5  3.205545 4.464493 3.839944 3.763671                                             
6  3.868796 4.954696 3.340530 5.165389 3.589912                                    
7  3.906698 3.971069 3.405455 5.403859 4.284414 4.774963                           
8  2.620238 4.479064 5.403749 3.128820 4.237437 5.272889 5.551908                  
9  3.645784 4.586749 5.508289 3.333739 4.318391 6.113694 4.796519 3.641355         
10 2.292591 4.152536 4.869231 3.445773 3.557222 3.992109 4.061925 3.740496 4.225799

很好,但是:当我有一个更大的矩阵时
dim(Large_m)
[1] 978 235

我尝试

a=dist(Large_m)

我得到的不是矩阵,而是一个“Large dist”对象,如Rstudio所说。

如果我使用as.matrix,这样正确吗?

b=as.matrix(a)

我检查了一下,发现b确实是矩阵并且像距离矩阵。

此外,我真的需要距离矩阵中的行名称,而不仅仅是数字,但是使用as.matrix这种方式无法获取它。

看来我还缺少些什么,创建一个距离矩阵在R中不可能那么复杂。


1
我不知道那里似乎很复杂:a=dist(matrix(rnorm(1:(978*325)),ncol=325));is.matrix(a) - Colonel Beauvel
@Colonel Beauvel 这让我得到了 [1] FALSE。我需要一个包含名称的矩阵作为输出。 - Kwnwps
你使用的 R 版本是哪个? - Colonel Beauvel
我正在使用R版本3.1.2(2014-10-31),并且使用RStudio版本0.98.1102进行工作,如果相关的话。 - Kwnwps
哎呀,你如何检测“Large dist”对象?使用typeof吗? - Colonel Beauvel
我试图发一张照片,但我的“声望”不够!我在Rstudio的环境选项卡中得到了“大距离”。使用typeof,我得到“double”。 - Kwnwps
1个回答

4
这是@ColonelBeauvel在评论中建议的明确示例。(我认为由于评论中的拼写错误:as.matrix() vs is.matrix(),有些混淆了...)

大型随机矩阵:

cols <- 325
rows <- 978

m <- matrix(rnorm(1:(rows*cols)), ncol=cols)

让我们给行和列取个名字:
rownames(m) <- paste0("r", 1:rows)
colnames(m) <- paste0("c", 1:cols)

使用dist计算对象之间的距离,然后使用as.matrix将其转换为常规矩阵(如Colonel Beauvel建议):

d <- dist(m)
dm <- as.matrix(d)

检查类型:

class(d)
[1] "dist"
class(dm)
[1] "matrix"

姓名保存在距离矩阵dm中。这是其中的一小部分:

dm[1:3,1:3]
         r1       r2       r3
r1  0.00000 24.64059 26.63301
r2 24.64059  0.00000 25.69792
r3 26.63301 25.69792  0.00000

希望这有所帮助。

感谢WhiteViking和@ColonolBeauvel。我必须理解dist对象的确切含义以及与实际计算的关联。现在我认为我已经清楚了。 - Kwnwps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接