2
a
和b
是兩個列表,其中對象編號相同。含在兩個a
和b
的對象是矩陣」。在R中匹配兩個矩陣列表(明智地)R
a<-list(matrix(c(1,2,2),1,3),matrix(c(2,1,1,1,2,2),2,3),matrix(,0,3))
b<-list(matrix(c(2,2,2),1,3),matrix(c(1,1,2),1,3),matrix(c(1,2,1),1,3))
> a
[[1]]
[,1] [,2] [,3]
[1,] 1 2 2
[[2]]
[,1] [,2] [,3]
[1,] 2 1 2
[2,] 1 1 2
[[3]]
[,1] [,2] [,3]
> b
[[1]]
[,1] [,2] [,3]
[1,] 2 2 2
[[2]]
[,1] [,2] [,3]
[1,] 1 1 2
[[3]]
[,1] [,2] [,3]
[1,] 1 2 1
從上面,我們可以看到在a
和b
有3個對象(即基體)。在列表a
在每個矩陣的行數而變化,而在列表b
的每個矩陣的行數是相同的(nrow=1
)。我想的a
比較每列與b
相應的行,並計算出有多少位置(各列)是相同的。
我們來看看中的第二個對象例如,和b
。在a
中,對象2是一個矩陣(ncol=3, nrow=2
),我們需要將每行與b
中的第二個矩陣進行比較。 a
的第二個對象中的第一行是2 1 2
,我們可以看到第二個和第三個數字與b
(1 1 2
)中的第二個對象相同,所以輸出是2
,然後我們繼續使用第二行(1 1 2
)作爲比較,我們發現三個數字與列表b
中的對象2
都是相同的,所以輸出是3
。
預期的結果如下:
[[1]]
[1] 2
[[2]]
[1] 2 3
[[3]]
[1] 0
我用下面的代碼來計算:
Map(function(a,b) matrix(sapply(1:3, function(x) {a[,x]==b[,x]}),ncol=3),a,b)
[[1]]
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[[2]]
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[2,] TRUE TRUE TRUE
[[3]]
[,1] [,2] [,3]
[1,] Logical,0 Logical,0 Logical,0
但我不知道怎麼去總結的結果,因爲在第三個對象中是Logical,0
。你能幫我解決這個問題嗎?謝謝。或者是否有其他方法來解決這個問題。謝謝!
尼斯解決方案,但它僅適用於OP的例子,並不用於'一個=列表(結構(C(1,2,2),.dim僞= C(1L, 3L)),結構(c(2, ,1,1,1,2,2),.Dim = 2:3),結構(c(1,2,3,2,5,3, 2 ,1),.Dim = c(3L,3L))); b = list(結構(c(2,2,2),.dim = c(1L,3L)),結構(c(1,0.1,2),.Dim = c(1L,3L)),結構(c(1,2,1,3,1,3),.Dim = 2:3))' – 989
@ m0h3n,OP指定「列表b的每個矩陣中的行號相同(nrow = 1)」 –
ahaaa。投了票 – 989