使用 same() 忽略列表中项目的顺序

Ser*_*gei 2 r

我正在使用相同的函数,我发现这个比较将返回 false:

identical(list(z = c(1,1,1), q = c(0,0,0)), list(q = c(0,0,0), z = c(1,1,1)))
Run Code Online (Sandbox Code Playgroud)

有没有办法确保 q 和 z 的顺序无关紧要,所以答案是 True?

MrF*_*ick 5

那么,如果你有

a <- list(z = c(1,1,1), q = c(0,0,0))
b <- list(q = c(0,0,0), z = c(1,1,1))
identical(a,b)
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

它们不相同,因为

a[[1]]
# [1] 1 1 1
b[[1]]
# [1] 0 0 0
identical(a[[1]], b[[1]])
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

这意味着列表在某些情况下会有所不同。

如果您想不考虑顺序进行比较,可以按名称对列表进行排序

identical(a[order(names(a))], b[order(names(b))])
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)