有人能解释我这里发生了什么吗?
我有一个列表需要与表匹配,我正在使用 lapply 与 fmatch (包fastmatch http://cran.r-project.org/web/packages/fastmatch/index.html)(我与匹配)相比,通过哈希表匹配使用匹配
但是,如果必须在函数中评估表值(至少这是我怀疑的那样),这是相当慢的,但我不完全确定。
我找到了一种解决方法,可以将计算速度从5.5加速到0.01秒,但是想要更优雅的解决方案
这是一个可重复的例子:
set.seed(10)
matchFeatures <- replicate(n = 1000, paste0("a", sample(x = 1:10000, size = sample(x = 1:10, size = 1))))
matchTable <- 1:10000
system.time(m1 <- lapply(matchFeatures, function(features) fmatch(features, paste0("a", 1:10000))))
system.time(m2 <- lapply(matchFeatures, function(features) force(fmatch(features, paste0("a", 1:10000)))))
system.time({tempTable <- paste0("a", 1:10000); m3 <- lapply(matchFeatures, function(features) fmatch(features, tempTable))})
identical(m1, m3)
感谢Justin,为了跟进,我正在寻找这样的事情:
system.time(m4 <- lapply(matchFeatures, fmatch, table = paste0("a", 1:10000)))
答案 0 :(得分:2)
在前两个函数中,每次迭代都会运行paste
命令一次(即10000次)。在第三种情况下,它只发生一次。如果您使用matchTable <- paste('a', 1:10000)
并将matchTable
传递给所有三个版本,则可以获得预期的大幅提升。
matchFeatures <- replicate(n = 1000,
paste0("a",
sample(x = 1:10000,
size = sample(x = 1:10, size = 1))))
matchTable <- paste('a', 1:10000)
system.time(m1 <- lapply(matchFeatures,
function(features) fmatch(features, matchTable)))
system.time(m2 <- lapply(matchFeatures,
function(features) force(fmatch(features, matchTable))))
system.time(m3 <- lapply(matchFeatures,
function(features) fmatch(features, matchTable)))
identical(m1, m3)