【发布时间】:2014-01-27 21:16:36
【问题描述】:
我有一个性能问题需要帮助。请多多包涵:
我有一个已知汽车 Vin# 和年份的数据库(为方便起见,仅显示 ~5,000 的前 4 行):
>vinDB
>ToyotaCarola 2008
IJDINJNDJIJKNDJIMKDK0897
NissanAltima 1998
LJIODJJNJDJNJDNJNJDJ7765
我还有一个 .txt 文档,其中显示了唯一的 DMV ID、VIN 号和参考号,方式如下(为方便起见,仅显示了约 5500 万行的 4 行):
>carFile
>#DMVcorrNumber33:1245638:563892:6378
IJDINJNDJIJKNDJIMKDK0897
+
VIN#IDref6388546
#DMVcorrNumber33:1245638:563892:6378
LJIODJJNJDJNJDNJNJDJ7765
+
VIN#IDref2453663
我想要做的是从我的“vinDB”文件中每隔第二行(VIN#)与“carFile”文件的每隔四行(从第二行开始)扫描一次,以获得完美匹配。如果匹配存在,我想输出汽车的名称,以及它在“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) 让上面的代码更快更高效。
2) 如何将我的输出存储在 .txt 或 .csv 文件中(因为现在,它只是在屏幕上显示输出)。
谢谢!
【问题讨论】:
标签: string r performance