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

标签 r mapply

我有一个 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-length 向量,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

关于R:将 mapply 用于两个向量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71166307/

相关文章:

r - Common Lisp 的统计包

r - 在 ggplot2 中为美国 map 着色

r - 在 R 中跨多个列表应用函数

r - 基于另一个数据框在数据框中扩展行和添加列

r - 如何指定在 R 的 mapply 中迭代哪些参数

r - 为什么从 Map 返回时 data.table 会被复制

c++ - R 数据框和 c++ 中的 which.min() 等价物

r - 使用重复的定界符分割字符串

从 Knitr 输出中的打印中删除注释

r - 从另一个 df 中的字符串检测一个 df 中的多个字符串,如果检测到,则返回检测到的字符串