1

我的问题建立在将字符串与多个模式匹配的主题之上。这里讨论的一种解决方案是使用sapply(keywords, grepl, strings, ignore.case=TRUE)它产生一个二维矩阵。

但是,当将此方法应用于 5K+ 关键字和 60K+ 字符串时,我遇到了严重的速度问题。(我在 12 小时后取消了该过程)。

一个想法是在 R 中使用哈希表或环境。但是,我不知道如何在保持数字索引的同时将字符串“翻译/转换”到环境中?

我有strings[1]...直到strings[60000]

e <- new.env(hash=TRUE)

   for (i in 1:length(strings)) {
        assign(x=i, value=strings, envir=e)
    }

因为xinassign必须是一个字符,我不能这样使用它,但我希望你明白我的想法..我希望能够使用与我的string[...]向量中相同的数字来索引环境

谢谢你的帮助!

4

1 回答 1

1

R 环境不像 perl 哈希那样使用,我认为只是因为没有广泛理解的“成语”这样做。就您而言,关键问题是,您真的想要数字索引吗?如果是这样,它应该是价值。关键是你的弦,这就是练习的重点。

e <- new.env(hash=T)
strings <- as.character(chickwts$feed) # note! not unique
sapply(1:length(strings), function(i)assign(strings[i], i, e))
e$horsebean   # returns 10

在此示例中,仅保留与每个字符串关联的最后一个索引,但您可以为每个键分配任何可能有用的内容,例如索引向量。

然后,您可以通过多种方式查找数据。例如,您可以使用 ls 正则表达式搜索键,并使用 mget() 检索值:

# find all keys containing 'beans'
ls(e, patt='bean')
# retrieve bean data
mget(ls(e, pat='bean'),e)
于 2013-09-06T09:36:35.453 回答