我有一個性能問題,我需要幫助。請和我一起承擔的解釋:加速字符串匹配的性能和速度R
我(爲便於只顯示前4行〜5000)的知名汽車Vin的#和多年的數據庫:
>vinDB
>ToyotaCarola 2008
IJDINJNDJIJKNDJIMKDK0897
NissanAltima 1998
LJIODJJNJDJNJDNJNJDJ7765
我也有AA的.txt文件這顯示出獨特的DMV ID,一個VIN號碼,並通過以下方式參考號(僅4行〜55所示億便於):
>carFile
>#DMVcorrNumber33:1245638:563892:6378
IJDINJNDJIJKNDJIMKDK0897
+
VIN#IDref6388546
#DMVcorrNumber33:1245638:563892:6378
LJIODJJNJDJNJDNJNJDJ7765
+
VIN#IDref2453663
我希望做的是掃描每個二線(VIN#)從我的'carFile'文件的每第四行(從第二行開始)從我的'vinDB'文件樂一場完美的比賽。如果匹配存在,我想輸出車的名字,以及在'carFile'文件中看到多少次。
因此,基本上,我需要這樣的:
Car Year NumTimesFound
ToyotaCarola 2008 238
NissanAltima 1998 1755
到目前爲止,我有以下的代碼,它的工作原理上截斷「carFile」文件,但崩潰我的[R計劃時,我嘗試將所有〜5500萬行:
VinCounter<-function(carFile, vinDB)
{
i=1 #index inner while loop
j=1 #index outer while loop
m=2 #index of vinDB, starts at '2' because first VIN# is on line 2
s=2 #index of carFile
count=0
while(j<=length(rownames(vinDB))/2) # VIN# is on every 2nd line in vinDB file
{
while(i<=length(rownames(carFile))/4)# VIN# is on every 4th line in carFile file
{
if(vinDB[m,1]==carFile[s,1])
{
count=count+1
s=s+4
}
else
{
s=s+4
}
i=i+1
}
print(vinDB[m-1,1])
print(count)
count=0
s=2
i=1
m=m+2
j=j+1
}
}
所以,基本上,我想弄清楚如何:
1)使上面的代碼quicked,更高效。
2)如何將我的輸出存儲在.txt或.csv文件中(因爲現在它只顯示屏幕上的輸出)。
謝謝!
非常感謝!我需要一勞永逸地學習'data.table'的力量。再次感謝! –