gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:28:52 28 4
gpt4 key购买 nike

我有一个 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com