我有一个循环,其中我必须计算一个字符串和多个字符串的向量之间的距离。我使用包“ stringdist”和同名的函数,效果很好。
但是,每次计算距离都需要花费一些时间。例如,要获得一个单词和350万个其他单词之间的距离,大约需要0.5秒。这似乎并不多,但是要做到350万次确实需要太长时间。
我不能做一个距离矩阵,因为它太大了,我分解了计算以避免必须计算一个完整的矩阵,即350万乘以350万。
是否有一种方法可以使用Rcpp来计算Levenshtein和/或Hamming距离(很多)来加快速度?
我尝试了编译器软件包并使用“ cmpfun”,但这不会改变速度。我假设我必须使用C ++编写函数stringdist?不幸的是,我不知道如何。
stringdist是循环的一部分,占用了该循环步骤95%的时间,因此减少将极大地帮助您。
任何帮助将不胜感激。
编辑1:
这是一个小的字符串向量,例如:
bioID
[1] "F" "FPhGLGcbLFF" "FhGWhSLYcmYF" "FhGcGbGYhF" "GGLcSFhGmhLYF" "GGbhhcLFF"
[7] "GLWGcGLmhcLFF" "GLYmcmFF" "GLbcmYF" "GLhhFGmGccmFF" "GLhhLGYLbGmFF" "GLhhLGbGchmYF"
[13] "GLhhLGmLYcmYF" "GLhhLLLGmcmFF" "GLhhLhGGGcmYF" "GLhhPPmmchmYF" "GLhhmGbGLcmYF" "GLhmYbGmmPmbF"
[19] "GLhmcbLFF" "GPhbhYmhPLbF" "GbhmLFF" "GhhYcmYF" "GmGhGYhcLFF" "GmbmbmhcLFF"
[25] "LGGYmcmFF" "LGLGmPmbF" "LGbF" "LGhbLchmYF" "LLGLYhGcLFF" "LLPGhhbPLmcmFF"
[31] "LLcmmPPmhcLFF" "LLhhLLGLhhYmcmFF" "LPPhcbLFF" "LYcmYF" "LbGmmPmbF" "LbLLGGccmYF"
[37] "LhPbGchmYF" "LhbGbmYGYhF" "LmhGLmLLhF" "PGYLhGcGYhF" "PLhhLLGLhhYmcmFF" "PLhhchhGhGLccmFF"
[43] "PLhmGLhhPmGGcmFF" "PbLhhbLmhGcLFF" "PbbcbGbcLGYhF" "PbhLcLGmhLYF" "PcLFF" "PcPcLFF"
[49] "PhbcLSmcmFF" "PmYcmYF" "PmbF" "SFFbmbhLYcmYF" "SGGGbhchmYF" "SGGPhLGcbLFF"
[55] "SGGmGcmhGcLFF" "SGLGcFGhcLFF" "SGLGmGLGcmYF" "SGLLGhGmhLYF" "SGLPbPmYmcmFF" "SGLWhGcGbLFF"
[61] "SGLmmLmhcLFF" "SGPLbbmmPmbF" "SGPmhLcbcchmYF" "SGSGGbLhchmYF" "SGWGYLGcmYF" "SGWhLbPLbcmYF"
[67] "SGbGGmhLYF" "SGcbLFGmmPmbF" "SGcmWGGGLLbF" "SGhLLGGLmcmYF" "SGhbhGPcYcmYF" "SGmGGLLFLYmcmFF"
[73] "SGmLGLLmPmbF" "SLFGGhGbbLcLFF" "SLFGbGFhcLFF" "SLFGmGGhGLmLLhF" "SLFPFbcLLLYcmYF" "SLFPLLGGhchmYF"
[79] "SLFSFbcLFF" "SLFbGhcmYGYhF" "SLFbGmLYGYhF" "SLFcGGLccbLFF" "SLFhGLLmhcLFF" "SLFmGLbcmGmcmFF"
[85] "SLFmPchmYcmYF" "SLFmbPLGLmLLhF" "SLGGGLLFYmcmFF" "SLGGGLLGmhcLFF" "SLGGGLmcbLFF" "SLGGGYmcmFF"
[91] "SLGGGhGLmLLhF" "SLGGGhLcYmcmFF" "SLGGGhhcLFF" "SLGGLGYhmcmFF" "SLGGLLGcYmcmFF" "SLGGLLhGcLFF"
[97] "SLGGLhFhcLFF" "SLGGSGLhGhhYmcmFF" "SLGGbLYcmYF" "SLGGbbcLYGYhF"
编辑2:我使用@Andrew的评论重新考虑了这个问题,这就是我现在如何处理它:
由于我现在无论如何只需要1的距离,所以我只使用长度相同,较短一个字母或较长一个字母的字符串来计算手边的字符串的距离。这样可以大大减少时间。大型数据集仍然需要很长时间,但已经有所帮助。