在R中快速读取多个文件

标签 r

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

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

最佳答案

我认为最快的方法是 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)
}

关于在R中快速读取多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051856/

相关文章:

r - 找到两个非常相似的值之间差异的第一个有效数字

r - 使用 if/else 语句根据使用 R 的行的起始字母和字符串长度为列插入小数

r - 使用循环在目录中创建多个文件夹以写入名称 R

r - 相当于 R 中的 nlcom (Stata)?回归系数的非线性变换

r - 选择 data.table R 中的列子集

r - 从 df 中选择行,根据它们的值进行子组(逐一)

r - 用 NA 替换某些值后向量长度不正确

r - 为什么使用 quantmod 获取开盘交易价格会出现延迟

在 R 中读取有向图

r - 从 knitr 调用时 fread 的奇怪输出