2016-09-20 1 views
1

I Liste haben alsCheckliste, um herauszufinden, alle Werte sind gleiche in R

folgt
l = list(c("a", "b", "c"), c("a", "b", "c"), c("a", "b", "c")) 

Ich möchte überprüfen, dass jeder von ihnen dieselben Werte enthalten Familie Funktionen anwenden werden.

Ich möchte folgende Antwort

TRUE, TRUE, TRUE 
+0

Ein bisschen unklar, was die Werte von TRUE beziehen sich auf. Ist der Wert: "dieser Artikel ist der gleiche wie die anderen"? Oder: "Dieser Gegenstand hat mindestens ein anderes Spiel"? Oder...? Vielleicht möchten Sie mehr Beispiele + erwartete Ergebnisse veröffentlichen. Was ist der gewünschte Wert für "Liste (1, 1, 1, 2)" oder "Liste (1, 1, 2, 2)", z.B. – arvi1000

Antwort

3

Wir duplicated

duplicated(l)|duplicated(l, fromLast=TRUE) 
#[1] TRUE TRUE TRUE 

verwenden können, wenn wir müssen alle Kombinationen von list Elementen vergleichen, combn ist ein anderer Weg

combn(seq_along(l), 2, FUN= function(x) all(l[[x[1]]] == l[[x[2]]])) 
#[1] TRUE TRUE TRUE 
+0

gute Antwort, versuchen herauszufinden, warum' do.call (all.equal, l) 'gibt' TRUE' für 'l = list (c ("a", "b", "c"), c ("a", "b", "c"), c ("a", "b", "x")) " – C8H10N4O2

+0

@ C8H10N4O2" alle .equal' gibt einen einzelnen TRUE zurück. Auch in diesem Fall scheint es einen Vergleich zwischen allen Elementen zu geben und gibt einen einzelnen WAHR zurück. Sie können eines der Listenelemente ändern, indem Sie sagen 'l [[2]] <-" a "' und es sagt die "Längen unterscheiden sich" – akrun

+0

@ C8H10N4O2 Nach weiterer Untersuchung scheint es nicht der Fall zu sein. 'l1 <- l; l1 [[3]] <- 1; do.call (all.equal, l1) # [1] TRUE' Also werden möglicherweise nur die ersten beiden Elemente verglichen? – akrun

2

Wenn Sie wirklich die apply Familie verwenden möchten, könnten Sie so etwas wie tun:

l = list(c("a", "b", "c"), c("a", "b", "c"), c("a", "b", "c")) 
sapply(l, function(x) all.equal(x, l[[1]])) 
# returns [1] TRUE TRUE TRUE 
l = list(c("a", "b", "c"), c("a", "b", "c"), c("a", "b", "x")) 
sapply(l, function(x) all.equal(x, l[[1]])) 
# returns [1] "TRUE" "TRUE" "1 string mismatch" 
+0

@ akruns Antwort ist besser, diese verwendet nur eine 'apply'-Funktion pro OP – C8H10N4O2

Verwandte Themen