我试图优化r中的一个循环,该循环计算向量中关于数据帧中每一行的每个元素的字符串匹配数量。在小数据集中,它工作得很好(〜15分钟; 11列,914行)。但是,运行庞大的数据集需要数天(914列,18.000行)。这是我非常基本的循环:加速r循环字符串匹配(矢量与数据帧)
for (j in 1: dim(pddbnh)[1]){
for (i in 1:dim(pidf)[1]){
richa[i,j] <- length(pidf[i,][pidf[i,] == row.names(pddbnh)[j] ])
}
}
我想知道是否有人知道如何使用其他方法(如矢量化)优化此循环。任何解决方案将非常感谢!
UPDATE 这是一个小数据集。这是最快的国家之一
df<-data.frame(replicate(10,sample(c("sp1", "sp2"),10,rep=TRUE)))
vec<-c("sp1", "sp2")
richa <- data.frame()
for (j in 1:length(vec)){
for (i in 1:dim(df)[1]){
richa[i,j] <- length(df[i,][df[i,] == vec[j] ])
}
}
是的,我可能知道如何做到这一点。请为测试提供一个最小可重现的示例。 – Roland
谢谢!以下是两个文件:https://www.dropbox.com/s/vvksp7c1kerqjbq/pddbnh.csv?dl=0 https://www.dropbox.com/s/zjt9shku0gjf03t/pidf.csv?dl=0 – CristianR
(显然你还没有对SO进行彻底搜索,因为有许多问答关于提高for循环的性能。)询问'['处理'[pidf [i,] == row.names(pddbnh)[ j]]似乎注定要失败。该参数的结果将在强制后为0或1(因此应该出现关于长度为零的替换的错误)。也许你应该解释你实际尝试的是什么。 –