【问题标题】:Make function and apply to read data in R?制作函数并应用于读取R中的数据?
【发布时间】: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 小时才能完成:(

标签: r import dataset fread


【解决方案1】:

我猜必须有一种方法可以更有效地提取您想要的内容。但我认为并行运行可以为您节省大量时间。通过不存储每个文件来节省内存。

library("data.table")

#Create function you want to eventually loop through in parallel
readFiles <- function(x) {
   data <- fread(x,skip=37)
   my <- as.matrix(data[1:57600,2,with=F]);
   mesh <- array(my, dim = c(120,60,8));
   Ms<-1350*10^3    # A/m
   asd2=(mesh[70:75,24:36 ,2])/Ms;     # in A/m

   ort_my<- mean(asd2);
   return(ort_my)
}


#R Code to run functions in parallel

library(“foreach”);library(“parallel”);library(“doMC”)
detectCores() #This will tell you how many cores are available
registerDoMC(8) #Register the parallel backend

#Can change .combine from rbind to list
OutputList <- foreach(listcsv,.combine=rbind,.packages=c(”data.table”)) %dopar% (readFiles(x))

registerDoSEQ() #Very important to close out parallel backend.

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-04-13
  • 2020-04-21
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多