将交叉距离矩阵从“Crossdist”类转换为矩阵

时间:2021-02-16 15:16:41

标签: r class matrix distance

我使用代理包计算了以下交叉距离矩阵,并希望将其用作矩阵对象。但是,crossdistance 属于“crossdist”类,并且使用 crossdistance <- as.matrix(crossdistance) 不会将其转换为矩阵,而是仍然属于“crossdist”类。欢迎任何评论:)

mat1 <- matrix(c(1,1,1,2,2,2),ncol=1)
mat2 <- matrix(c(1,2,2,2,3,3),ncol=1)

(crossdistance <- proxy::dist(mat1,mat2,type="euclidean"))

输出:

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


str(crossdistance)

输出:

 'crossdist' num [1:6, 1:6] 0 0 0 1 1 1 1 1 1 0 ...
 - attr(*, "method")= chr "Euclidean"
 - attr(*, "call")= language proxy::dist(x = mat1, y = mat2, type = "euclidean")

2 个答案:

答案 0 :(得分:1)

也许你可以试试

crossdistance <- `attr<-`(
  as.matrix(
    as.data.frame.matrix(crossdistance)
  ), "dimnames", NULL
)

你会看到

> crossdistance
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    1    1    1    2    2
[2,]    0    1    1    1    2    2
[3,]    0    1    1    1    2    2
[4,]    1    0    0    0    1    1
[5,]    1    0    0    0    1    1
[6,]    1    0    0    0    1    1

> str(crossdistance)
 num [1:6, 1:6] 0 0 0 1 1 1 1 1 1 0 ...

答案 1 :(得分:1)

我们也可以使用 dim<-

crossdistance2 <- `dim<-`(c(crossdistance), dim(crossdistance))