gpt4 book ai didi

r - 检查列表的所有元素在 R 中是否相等

转载 作者:行者123 更新时间:2023-12-04 09:35:54 27 4
gpt4 key购买 nike

我有几个向量的列表。我想检查列表中的所有向量是否相等。有identical仅适用于成对比较。所以我写了以下看起来很难看的函数。我仍然没有找到更好的解决方案。这是我的 RE:

test_true <- list(a=c(1,2,3),b=c(1,2,3),d=c(1,2,3))
test_false <- list(a=c(1,2,3),b=c(1,2,3),d=c(1,32,13))

compareList <- function(li){
stopifnot(length(li) > 1)
l <- length(li)
res <- lapply(li[-1],function(X,x) identical(X,x),x=li[[1]])
res <- all(unlist(res))
res
}

compareList(test_true)
compareList(test_false)

有什么建议?除了成对比较之外,是否有任何本地检查相同?

最佳答案

怎么样

allSame <- function(x) length(unique(x)) == 1

allSame(test_true)
# [1] TRUE
allSame(test_false)
# [1] FALSE

正如@JoshuaUlrich 在下面指出的那样, unique在列表上可能很慢。另外, identicalunique可以使用不同的标准。 Reduce是我最近学到的用于扩展成对运算的函数:
identicalValue <- function(x,y) if (identical(x,y)) x else FALSE
Reduce(identicalValue,test_true)
# [1] 1 2 3
Reduce(identicalValue,test_false)
# [1] FALSE

在找到一个不匹配项后,这会低效地继续进行比较。我对此的粗略解决方案是写 else break而不是 else FALSE ,抛出错误。

关于r - 检查列表的所有元素在 R 中是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com