【发布时间】:2014-04-21 06:13:30
【问题描述】:
我有一组数据(大约 50000 个数据。每个数据 1.5 mb)。因此,为了加载数据并首先处理数据,我使用了这段代码;
data <- list() # creates a list
listcsv <- dir(pattern = "*.txt") # creates the list of all the csv files in the directory
然后我使用for循环来加载每个数据;
for (k in 1:length(listcsv)){
data[[k]]<- read.csv(listcsv[k],sep = "",as.is = TRUE, comment.char = "", skip=37);
my<- as.matrix(as.double(data[[k]][1:57600,2]));
print(ort_my);
a[k]<-ort_my;
write(a,file="D:/ddd/ads.txt",sep='\t',ncolumns=1)}
所以,我设置了程序运行,但即使 6 小时后它也没有完成。虽然我有一台不错的电脑,配备 32 GB 内存和 6 核 CPU。
我已经搜索了论坛,也许fread 功能会帮助人们说。然而,到目前为止,我发现的所有示例都处理使用 fread 函数读取的单个文件。
谁能建议我解决这个问题,以便更快地循环读取数据并用这么多的行和列处理它?
【问题讨论】:
-
您正在尝试将 75GB 的数据读入内存?您可能需要重新考虑您的方法。如果您可以一次处理一个文件,那么您将使用 data.table
fread函数获得更好的性能,并且您可以运行它。首先尝试使用少量文件来估计时间。 -
说 100 个文件需要多长时间?看起来循环中的每次迭代都独立于先前的迭代,如果是这样,您应该考虑使用并行包在 6 个 CPU 之间分配工作负载。你可以把它变成一个函数并使用
parLapply -
感谢您的及时回答,我已经计算了时间,70 条数据需要 27.34 秒。 (没有 fread)所以总共(50000 个文件)如果我运行此代码至少 6 小时才能完成:(