我所知道的包中的所有距离/相似度函数都旨在计算矩阵中“每对行”的距离/相似度。
如果输入矩阵非常大,则 dist 矩阵将需要更大的内存,因为 n 行输入矩阵将导致 *n 大小的 dist 矩阵。
我有一个目标项目 x 和一个项目集 Y,我想计算这个目标项目 x 和 Y 中的每个项目 y 之间的距离/相似度。我如何在 R 中做到这一点?
我所知道的包中的所有距离/相似度函数都旨在计算矩阵中“每对行”的距离/相似度。
如果输入矩阵非常大,则 dist 矩阵将需要更大的内存,因为 n 行输入矩阵将导致 *n 大小的 dist 矩阵。
我有一个目标项目 x 和一个项目集 Y,我想计算这个目标项目 x 和 Y 中的每个项目 y 之间的距离/相似度。我如何在 R 中做到这一点?
这是一个使用 apply 函数的好地方。您想要做的是在您的目标项目 x 和 y 的每个项目之间进行比较。这可以通过对 y 的每个项目应用一个函数来完成。
假设 y 是一个矩阵,每一列是一个项目,这很容易进行相关性,因为它可以计算两个项目之间的相关性:
apply(y, 2, cor, x)
这将为您提供一个向量,其中每个元素对应于 x 和 y 的第 i 个项目之间的相关性。
如果您愿意,还可以更改关联方法:
apply(y, 2, cor, x, method="spearman")
如果您使用 dist,这会稍微复杂一些,因为它不需要两个参数。它还假设行是项目而不是列:
apply(y, 2, function(y.item, x.item) { dist(rbind(y.item, x.item)) }, x)
同样,如果您想使用与默认值不同的距离方法(或将其他参数更改为 dist),您始终可以传入更多参数:
apply(y, 2, function(y.item, x.item, ...) {
dist(rbind(y.item, x.item), ...)
}, x, method="manhattan")
问题可以通过代理包解决
x<-rnorm(10)
x<-matrix(x)
y<-matrix(rnorm(10*5),nrow=5)
require( proxy)
dist(t(x),y)