【发布时间】:2013-08-12 03:37:54
【问题描述】:
我有两个长的名字向量(list.1、list.2)。我想运行一个循环来检查 list.2 中的任何名称是否与 list.1 中的任何名称匹配。如果确实如此,我想将匹配名称在向量 list.1 中的位置值附加到向量 result。
for (i in list.2){
for (j in list.1){
if(length(grep(list.2[i], list.1[j]), ignore.case=TRUE)==0){
append(result, j)
break
} else append(nameComment.corresponding, 0)
}
}
上面的代码真的很暴力,因为我的向量有 5,000 和 60,000 个名字长,它可能会运行超过 360,000,000 次循环。我该如何改进它?
【问题讨论】:
-
你看过
%in%或match()吗? -
下面的建议有用吗?如果某个答案确实解决了您的问题,您可能需要考虑投票和/或将其标记为已接受,以表明问题已得到回答,方法是勾选合适答案旁边的绿色小复选标记。您没有义务这样做,但它有助于保持网站没有未回答的问题,并奖励那些花时间解决您的问题的人。
-
这完全是集合操作
intersect的用途......在你的情况下用match(intersect(list.1, list.2), list.1)包装它。永远不要写 O(N1*N2) 循环......
标签: r list intersection intersect