2013-12-15 127 views
6

我有一個list列表,並且想要檢查list(它們是list類型)的所有元素是否都相同。如何以最快的方式做到這一點?測試一個列表中的所有元素(列表本身)是否相等

更新:我把一個可重複的例子下面。關鍵是要得到這樣一個測試的FALSE值,因爲eventual.list的兩個元素是不同的:eventual.list[[1]][[1]]data.frame具有其他值不是eventual.list[[2]][[1]]data.frame

代碼:

a <- 1:3 
b <- 1:3 
c <- 2:4 

l1.el1 <- data.frame(a, b) 
l1.el2 <- a 
l1 <- list(l1.el1, 
      l1.el2) 

l2.el1 <- data.frame(a, c) 
l2.el2 <- a 
l2 <- list(l2.el1, 
      l2.el2) 

eventual.list <- list(l1, 
         l2) 
eventual.list 

控制檯輸出:

> eventual.list 
[[1]] 
[[1]][[1]] 
    a b 
1 1 1 
2 2 2 
3 3 3 

[[1]][[2]] 
[1] 1 2 3 


[[2]] 
[[2]][[1]] 
    a c 
1 1 2 
2 2 3 
3 3 4 

[[2]][[2]] 
[1] 1 2 3 
+0

你能舉一個最小的例子嗎?例如,該列表是否僅包含單個數值或向量或其他類型的對象? – Thomas

+0

嗨,謝謝你的關注!是的,元素列表應該包含不同類型的對象,例如e.c.數據幀,矢量等(見我提供的一個例子)。 –

回答

18

這是確定列表中的所有項目是否是相同的規範方法:

length(unique(object))==1 

你的情況:

> length(unique(eventual.list)) 
[1] 2 

> length(unique(eventual.list)) == 1 
[1] FALSE 

unique幫助頁面可能會導致一個認爲清單將不會被處理,直到一個反映了這個結果時,我遇到了它第一次讓我感到驚訝:

is.vector(eventual.list) 
[1] TRUE 

因此名單是技術上R語言中的向量,它們不是「原子」向量,它們是「遞歸」的。

> is.atomic(eventual.list) 
[1] FALSE 
> is.recursive(eventual.list) 
[1] TRUE 
+0

它的作品,謝謝! –

+0

這是個好主意。在這半個小時裏,我正在剎車 –

相關問題