我有一个R函数,用于计算两个向量的汉明距离:
Hamming = function(x,y){
get_dist = sum(x != y, na.rm=TRUE)
return(get_dist)
}
我希望将以下操作应用于两个矩阵M1,M2的每一行,而不使用for循环。目前我所拥有的代码使用了非常耗时的循环(其中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在做什么有误解。
是否有一种简单的mapply应用或R apply系列中的其他方法可以实现这个功能?
R
中,矩阵是一个向量。如果您将矩阵的行作为两个列表中的元素,则可以使用此方法。 - Ameyam
-by-n
数据框被存储为长度为n
的向量列表,每个向量的长度为m
。它会像任何其他长度为n
的列表一样被mapply
处理。这里mapply
如何处理数据框是无关紧要的,因为m
-by-n
数据框的转置是一个n
-by-m
矩阵,而不是一个n
-by-m
数据框。例如,尝试运行is.matrix(t(data.frame(a=1:2, b=1:2)))
。 - Mikael Jagan