我有一個計算兩個向量的漢明距離的 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 在做什么。
是否有一個直接的應用程式 mapply 或 R apply 系列中的其他東西可以作業?
uj5u.com熱心網友回復:
如果dim(M1)和dim(M2)相同,那么您可以簡單地執行以下操作:
rowSums(M1 != M2, na.rm = TRUE)
您的嘗試mapply沒有奏效,因為m-by-n矩陣存盤為-lengthm*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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426658.html
