R输出中的dist()函数

时间:2015-09-07 15:53:52

标签: r matrix output distance

我很好奇我得到的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)

我没有得到矩阵,而是像Rstudio所说的那样是一个“大型”对象。

如果我将其与as.matrix一起使用,是否正确?

b=as.matrix(a)

b我检查的确是一个矩阵,看起来像是距离矩阵。

另外,我真的需要距离矩阵中的行名,而不仅仅是数字,但这样(使用as.matrix)我无法得到它。

似乎我遗漏了一些东西,在R中创建距离矩阵不会那么复杂。

1 个答案:

答案 0 :(得分:4)

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

大型随机矩阵:

^.*?[.?!](?=\s+\p{P}*[\p{Lu}\p{N}]|\s*$)

让我们给行和列命名:

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的常规矩阵(按照Beauvel上校的建议):

as.matrix

检查类型:

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

名称保留在距离矩阵dm中。这是一小部分:

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

希望这有帮助。