R:将 mapply 用于两个向量的函数

R: using mapply for a function of two vectors

我有一个计算两个向量汉明距离的 R 函数:

Hamming = function(x,y){
get_dist = sum(x != y, na.rm=TRUE)
return(get_dist)
}

我想在不使用 for 循环的情况下应用于两个矩阵 M1、M2 的每一行。我目前拥有的(其中 L 是 M1 和 M2 中的行数)是非常耗时的循环:

xdiff = c()
for(i in 1:L){
    xdiff = c(xdiff, Hamming(M1[i,],M2[i,]))
}

我认为这可以通过执行

来完成
mapply(Hamming, t(M1), t(M2))

(使用转置,因为 mapply 跨列工作),但这不会为每一行生成汉明距离的长度 L 向量,所以我可能误解了 mapply 在做什么。

在 R apply 系列中是否有直接的 mapply 应用程序或其他可以工作的应用程序?

如果dim(M1)dim(M2)相同,那么你可以简单地做:

rowSums(M1 != M2, na.rm = TRUE)

您对 mapply 的尝试没有成功,因为 m-by-n 矩阵存储为 m*n 长度向量,并且 mapply这样处理它们。要使用 mapply 完成此操作,您需要将每个矩阵拆分为行向量列表:

mapply(Hamming, asplit(M1, 1L), asplit(M2, 1L))

vapply 会更好,不过:

vapply(seq_len(nrow(M1)), function(i) Hamming(M1[i, ], M2[i, ]), 0L)

无论如何,只要使用rowSums