R- adist 花了太长时间 运行
R- adist taking too long to run
目前正在处理大约 250k 的数据集rows.The utils 包的 adist 函数运行了几个小时(8+)
使用代码:
master <- read.csv("Master.csv",header=TRUE)
companies <- read.csv("Clean Companies.csv",header=TRUE)
dirty<- subset(master,select=c("Company"))
comp<- subset(companies,select=c("COMPANY.CLEAN"))
dim(dirty)
> 246774 1
#To test one can use:
#dirty = data.frame(name= c("ABC","*/BC","HO**E...","OFFi....ce"))
#comp = data.frame(info_names= c("ABC","HOME","OFFICE"))
mat <- adist(dirty1[, 1], comp[, 1]);
data<-cbind.data.frame(orig=dirty[, 1], new=comp[apply(mat, 1, which.min), 1])
有没有更好的方法?
我不太了解 adist 函数,但您可以将其并行化,例如foreach,如果 dirty 中的输入向量可以按元素使用:(迭代器应该有助于减少内存使用)
library(foreach)
library(iterators)
mat_for <- foreach(dirti = iter(dirty$name), .export = "comp", .combine = rbind) %do% {
adist(dirti, comp[, 1])
}
你只需要选择一个合适的并行后端并将 %do% 更改为 %dopar%
使用并行版本 lapply 的其他并行方法(例如 snow 包中的 parLapply)也应该有效:
mat_lap <- Reduce(rbind, lapply(dirty$name, function(x, comp) adist(x, comp[, 1]), comp= comp))
在一小部分数据上测试并行方法,然后您还可以查看计算时间是否减少。用你的例子我得到了相同的结果:
> all.equal(mat_lap, mat)
[1] TRUE
> all.equal(mat_for, mat)
[1] TRUE
目前正在处理大约 250k 的数据集rows.The utils 包的 adist 函数运行了几个小时(8+)
使用代码:
master <- read.csv("Master.csv",header=TRUE)
companies <- read.csv("Clean Companies.csv",header=TRUE)
dirty<- subset(master,select=c("Company"))
comp<- subset(companies,select=c("COMPANY.CLEAN"))
dim(dirty)
> 246774 1
#To test one can use:
#dirty = data.frame(name= c("ABC","*/BC","HO**E...","OFFi....ce"))
#comp = data.frame(info_names= c("ABC","HOME","OFFICE"))
mat <- adist(dirty1[, 1], comp[, 1]);
data<-cbind.data.frame(orig=dirty[, 1], new=comp[apply(mat, 1, which.min), 1])
有没有更好的方法?
我不太了解 adist 函数,但您可以将其并行化,例如foreach,如果 dirty 中的输入向量可以按元素使用:(迭代器应该有助于减少内存使用)
library(foreach)
library(iterators)
mat_for <- foreach(dirti = iter(dirty$name), .export = "comp", .combine = rbind) %do% {
adist(dirti, comp[, 1])
}
你只需要选择一个合适的并行后端并将 %do% 更改为 %dopar%
使用并行版本 lapply 的其他并行方法(例如 snow 包中的 parLapply)也应该有效:
mat_lap <- Reduce(rbind, lapply(dirty$name, function(x, comp) adist(x, comp[, 1]), comp= comp))
在一小部分数据上测试并行方法,然后您还可以查看计算时间是否减少。用你的例子我得到了相同的结果:
> all.equal(mat_lap, mat)
[1] TRUE
> all.equal(mat_for, mat)
[1] TRUE