在R的Wordspace包中,是否可以改变dist.matrix来处理NA?

时间:2018-05-02 05:43:39

标签: r matrix distance

我一直在使用Stats中的dist函数计算距离矩阵。我从Wordspace遇到dist.matrix,对于大型矩阵来说似乎要快得多。但是,虽然dist可以处理NA,但dist.matrix不能,当缺少值时,用NAs填充整个矩阵。

例如:

X <- data.frame(replicate(5,rnorm(100)))
X[1:10, 1] <- NA
X[10:30, 2] <- NA
X[50:55, 3] <- NA

d <- as.matrix(dist(as.matrix(X), method = "euclidean"))
> d[1:6, 1:6]
      1        2        3        4        5        6
1 0.000000 1.434098 2.956302 1.505901 3.172647 2.083671
2 1.434098 0.000000 3.799095 2.326719 3.599186 2.935583
3 2.956302 3.799095 0.000000 2.097622 3.661096 1.455270
4 1.505901 2.326719 2.097622 0.000000 3.995651 0.843491
5 3.172647 3.599186 3.661096 3.995651 0.000000 4.095924
6 2.083671 2.935583 1.455270 0.843491 4.095924 0.000000

鉴于:

d2 <- dist.matrix(as.matrix(X), method="euclidean")
> d2[1:6, 1:6]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]  NaN  NaN  NaN  NaN  NaN  NaN
[2,]  NaN  NaN  NaN  NaN  NaN  NaN
[3,]  NaN  NaN  NaN  NaN  NaN  NaN
[4,]  NaN  NaN  NaN  NaN  NaN  NaN
[5,]  NaN  NaN  NaN  NaN  NaN  NaN
[6,]  NaN  NaN  NaN  NaN  NaN  NaN

参数skip.missing = T似乎没有帮助。此外,跳过不是正确的解决方案:dist做的是缩放距离以反映特定对中非NA的数量。

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

distm()函数可以很好地处理NA,但是我不知道解决方案的速度。