【发布时间】:2012-12-05 03:47:31
【问题描述】:
我有一个数字向量列表,我需要创建一个列表,其中每个向量只包含一个副本。相同的函数没有列表方法,所以我编写了一个函数来应用来检查每个向量。
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)
【问题讨论】:
-
我们是在谈论数字向量还是任何类型的向量?
-
Ryan -- 为了未来搜索者的利益,您能否将我的回答中的“接受”切换为@RicardoSaporta 的回答?谢谢!