我有超过 10000 个 csv 文件,我需要对每个 csv 文件的每一列进行快速傅里叶变换。我可以访问 1000 个核心。最快的方法是什么?
目前,我有一个 for 循环按顺序读取每个文件并使用 apply(data, 2, FFT)
函数。我该怎么做呢?我尝试做clusterapply(1:10000, cl, conversion)
。在转换函数中,我已经读取了csv。完成所有阅读仍然需要很长时间。你们有人知道更快的方法吗?
最佳答案
我认为最快的方法是 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)
}
关于在R中快速读取多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051856/