Cách tốt nhất để so sánh nhiều hơn hai đối tượng với all.equal()
là gì?R: all.equal() cho nhiều đối tượng?
Dưới đây là một cách:
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 chỉ ra rằng một lót ở trên chỉ cho bạn biết liệu các đối tượng đều bình đẳng hay không, trong khi all.equal()
cho bạn biết những gì không phải là bình đẳng về chúng nếu chúng không bằng nhau.
Ý tưởng hay - có khả năng phát hiện sự khác biệt giữa các hạng mục phi đầu tiên sẽ được thuận tiện. Điều gì về việc tạo ra một ma trận của các cặp tên để tránh việc tự so sánh trong 'outer()'? 'tên <- c (" foo "," bar "," faz "); cặp <- t (combn (tên, 2)); áp dụng (cặp, 1, hàm (x) all.equal (get (x [1]), nhận (x [2]))) ' – treysp
@treysp, đồng ý, xem sửa đổi của tôi. – BrodieG