合并和附加 ffdf 数据帧列表
Merging and appending a list of ffdf dataframes
我想读取一个 CSV 文件名向量作为 ffdf
数据框,并将它们组合成一个大的 ffdf
数据框。我找到了使用其他 r
软件包的解决方案;然而,我的问题是我的数据(合并)可以达到 40GB,这肯定需要存储在磁盘上,就像 ff
包一样,而不是在 RAM 中。据我所知,这里有很棒的 solutions 使用 RAM 存储。
library(ffbase)
library(ff)
# Create list of csv files
csv_files <- list.files(path = input_path,
pattern="*.csv",
full.names = T)
# my approach so far
# this use fread, and it appears to be consuming RAM
# Read the files in, assuming comma separator
csv_files_df <- lapply(csv_files, function(x) {
y<-unlist(str_split(x, "[.]"))[1]
assign(y,
as.ffdf(fread(x,stringsAsFactors = T)))})
# Combine them
combined_df <- do.call("ffdfappend", lapply(csv_files_df, as.ffdf))
当我尝试组合它们时,它会引发此错误。
> combined_df <- do.call("ffdfappend", lapply(csv_files_df, as.ffdf))
Error in ffdfappend(list(virtual = list(VirtualVmode = c("double", "integer", :
'list' object cannot be coerced to type 'logical'
总结:我想只使用 ff
包来读取和合并 CSV 文件,而不需要另一个包来避免 OOM(内存不足)状态。
ffdfappend()
函数只接受两个数据参数 - x
和 y
。当你提供一个列表时,它假设一些数据框是 ffdfappend()
的其他参数。要按照您想要的方式使用此函数,您可能需要将其写在一个循环中,如下所示:
csv_files <- list.files(path = input_path,
pattern="*.csv",
full.names = T)
# my approach so far
# this use fread, and it appears to be consuming RAM
read <- function(x) {
y<-unlist(str_split(x, "[.]"))[1]
assign(y,
as.ffdf(fread(x,stringsAsFactors = T)))}
# Read the files in, assuming comma separator
out <- read(csv_files[1])
for(i in 2:length(csv_files)){
out <- ffdfappend(out, read(csv_files(i)))
}
我想读取一个 CSV 文件名向量作为 ffdf
数据框,并将它们组合成一个大的 ffdf
数据框。我找到了使用其他 r
软件包的解决方案;然而,我的问题是我的数据(合并)可以达到 40GB,这肯定需要存储在磁盘上,就像 ff
包一样,而不是在 RAM 中。据我所知,这里有很棒的 solutions 使用 RAM 存储。
library(ffbase)
library(ff)
# Create list of csv files
csv_files <- list.files(path = input_path,
pattern="*.csv",
full.names = T)
# my approach so far
# this use fread, and it appears to be consuming RAM
# Read the files in, assuming comma separator
csv_files_df <- lapply(csv_files, function(x) {
y<-unlist(str_split(x, "[.]"))[1]
assign(y,
as.ffdf(fread(x,stringsAsFactors = T)))})
# Combine them
combined_df <- do.call("ffdfappend", lapply(csv_files_df, as.ffdf))
当我尝试组合它们时,它会引发此错误。
> combined_df <- do.call("ffdfappend", lapply(csv_files_df, as.ffdf))
Error in ffdfappend(list(virtual = list(VirtualVmode = c("double", "integer", :
'list' object cannot be coerced to type 'logical'
总结:我想只使用 ff
包来读取和合并 CSV 文件,而不需要另一个包来避免 OOM(内存不足)状态。
ffdfappend()
函数只接受两个数据参数 - x
和 y
。当你提供一个列表时,它假设一些数据框是 ffdfappend()
的其他参数。要按照您想要的方式使用此函数,您可能需要将其写在一个循环中,如下所示:
csv_files <- list.files(path = input_path,
pattern="*.csv",
full.names = T)
# my approach so far
# this use fread, and it appears to be consuming RAM
read <- function(x) {
y<-unlist(str_split(x, "[.]"))[1]
assign(y,
as.ffdf(fread(x,stringsAsFactors = T)))}
# Read the files in, assuming comma separator
out <- read(csv_files[1])
for(i in 2:length(csv_files)){
out <- ffdfappend(out, read(csv_files(i)))
}