我有超过10000个csv文件,我需要对每个csv文件的每一列进行快速傅里叶变换。我可以访问1000个核心。什么应该是最快的方式?
目前我有一个for循环按顺序读取每个文件并使用apply(data, 2, FFT)
函数。我该怎么办?我试过clusterapply(1:10000, cl, transformation)
。在转换函数中,我读过csv。所有的阅读仍然需要很长时间。你们中有谁知道更快的方式吗?
答案 0 :(得分:4)
我认为最快的方式是mclapply
和fread
。
#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)
}