我有一些数值向量的列表,需要创建一个只包含每个向量一个副本的列表。没有一个相同函数的列表方法,所以我编写了一个函数来检查每个向量是否与其他向量相同。
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的列表上运行时间不超过1分钟,但这可能是乐观的。
有人知道比较列表中每个向量与其他向量更有效的方法吗?这些向量本身保证具有相等的长度。
下面显示了示例输出。
x = list(1:4, 1:4, 2:5, 3:6)
F1(x)
> list(1:4, 2:5, 3:6)