在R中快速读取多个文件

时间:2014-11-20 23:53:43

标签: r

我有超过10000个csv文件,我需要对每个csv文件的每一列进行快速傅里叶变换。我可以访问1000个核心。什么应该是最快的方式?

目前我有一个for循环按顺序读取每个文件并使用apply(data, 2, FFT)函数。我该怎么办?我试过clusterapply(1:10000, cl, transformation)。在转换函数中,我读过csv。所有的阅读仍然需要很长时间。你们中有谁知道更快的方式吗?

1 个答案:

答案 0 :(得分:4)

我认为最快的方式是mclapplyfread

#Bring in libraries
library(parallel)
library(data.table)

#Find all csv files in your folder
csv.list = list.files(pattern="*.csv")

#Create function to read in data and perform fft on each column
read.fft <- function(x) {
    data <- fread(x)
    result <- data[, lapply(.SD,fft)]
return(result)
}

#Apply function using multiple cores
all.results <- mclapply(csv.list,read.fft,mc.cores=10)

如果您对每个数据集的随机样本有意义,我强烈建议更改read.fft函数以使用shuf命令。它将花费你的读入时间相当多。

#Create function to read in data and perform fft
read.fft <- function(x) {
    data <- fread(paste0("shuf -n 10000",x)) #Takes random sample of 10000 rows
    result <- data[, lapply(.SD,fft)]
return(result)
}