Qual è il modo migliore per confrontare più di due oggetti con all.equal()
?R: all.equal() per più oggetti?
Ecco un modo:
foo <- c(1:10)
bar <- letters[1:10]
baz <- c(1:10)
# doesn't work because all.equal() returns a character vector when objects not all equal
all(sapply(list(bar, baz), all.equal, foo))
# this works
mode(sapply(list(bar, baz), all.equal, foo)) == "logical" #FALSE
bar <- c(1:10)
mode(sapply(list(bar, baz), all.equal, foo)) == "logical" #TRUE
UPDATE: @BrodieG ha sottolineato che l'one-liner sopra di voi dice solo se gli oggetti sono tutti uguali o no, mentre all.equal()
ti dice che cosa non è uguale su di loro se non sono uguali.
Buona idea - essere in grado di rilevare le differenze tra i non primi elementi sarebbe utile. Che ne pensi di generare una matrice di coppie di nomi per evitare i confronti di sé in 'outer()'? 'nomi <- c (" foo "," bar "," faz "); coppie <- t (combn (nomi, 2)); apply (pairs, 1, function (x) all.equal (get (x [1]), get (x [2]))) ' – treysp
@treysp, d'accordo, vedere la mia modifica. – BrodieG