這裏是我的意思的例子,該代碼輸出正確的事:如何有效地將矩陣的每一行與R中列表的每一部分進行比較?
list1 = list(c(1,2,3,4), c(5,6,7), c(8,9), c(10, 11))
matrix1 = rbind(c(1,2), c(1,5), c(8, 10))
compare <- function(list.t, matrix.t) {
pairs <- 0
for (i in 1:nrow(matrix.t)) {
for (j in 1:length(list.t)) {
if (length(intersect(matrix.t[i,], list.t[[j]])) == 2) {
pairs <- pairs + 1
}
}
}
return(pairs/nrow(matrix.t))
}
compare(list1, matrix1)
# = 0.33333
我希望是有道理的。我試圖取一個nx2矩陣,並查看矩陣的每一行的兩個元素是否也在列表的每一部分中找到。所以,在上面的例子中,矩陣的第一行是(1,2),這個對在列表的第一部分找到。 (1,5)或(8,10)對在列表的任何部分都找不到。所以這就是爲什麼我輸出0.3333(1/3)。
我想知道是否有人知道不使用兩個for-loops來比較每一行到每個部分的方式?我有更大的矩陣和列表,所以這太慢了。
謝謝你的幫助!
更大程度的矢量化。我認爲也更容易理解。 –