【发布时间】:2014-07-15 15:36:27
【问题描述】:
我想这是微不足道的,我很抱歉,我找不到怎么做。
我正在尝试避免循环,因此我正在尝试对过程进行矢量化:
我需要做类似grep 的事情,但是pattern 是一个向量。另一种选择是match,其中value 不仅是第一个位置。
例如数据(这不是真实数据的样子,否则我会利用它的结构):
COUNTRIES=c("Austria","Belgium","Denmark","France","Germany",
"Ireland","Italy","Luxembourg","Netherlands",
"Portugal","Sweden","Spain","Finland","United Kingdom")
COUNTRIES_Target=rep(COUNTRIES,times=4066)
COUNTRIES_Origin=rep(COUNTRIES,each=4066)
现在,我得到了一个循环:
var_pointer=list()
for (i in 1:length(COUNTRIES_Origin))
{
var_pointer[[i]]=which(COUNTRIES_Origin[i]==COUNTRIES_Target)
}
match 的问题在于match(x=COUNTRIES_Origin,table=COUNTRIES_Target) 返回一个与COUNTRIES_Origin 长度相同的向量,并且值是 first 匹配,而我需要所有这些。
grep 的问题在于 grep(pattern=COUNTRIES_Origin,x=COUNTRIES_Target) 是给定的警告:
Warning message:
In grep(pattern = COUNTRIES_Origin, x = COUNTRIES_Target) :
argument 'pattern' has length > 1 and only the first element will be used
有什么建议吗?
【问题讨论】:
-
也许
is.element(COUNTRIES_Origin, COUNTRIES_Target)? -
你想要的输出是什么?您的循环代码每次都简单地重新分配 var_pointer 。这没有多大意义。
-
@MrFlick 是的......我的错,现在它是一个列表。
-
尝试向量化 MxN 匹配从根本上说性能不是很好,无论你怎么做,它仍然是 MN 操作。使用 哈希 代替 O(1) 查找。
标签: r vectorization