我有一个数字向量列表,我需要创建一个列表,其中只包含每个向量的一个副本。相同的函数没有列表方法,所以我编写了一个函数来应用来检查每个向量。
F1 <- function(x){
to_remove <- c()
for(i in 1:length(x)){
for(j in 1:length(x)){
if(i!=j && identical(x[[i]], x[[j]]) to_remove <- c(to_remove,j)
}
}
if(is.null(to_remove)) x else x[-c(to_remove)]
}
问题是随着输入列表 x 大小的增加,这个函数变得非常慢,部分原因是 for 循环分配了两个大向量。我希望有一种方法可以在一分钟内运行一个长度为 150 万且向量长度为 15 的列表,但这可能是乐观的。
有谁知道将列表中的每个向量与其他所有向量进行比较的更有效方法?向量本身保证长度相等。
示例输出如下所示。
x = list(1:4, 1:4, 2:5, 3:6)
F1(x)
> list(1:4, 2:5, 3:6)