将 R read_fwf 应用于文件列表

Applying R read_fwf to a list of files

我想将固定宽度文件的目录读取到单个数据帧中,并尝试使用 readr 中的 read_fwf 使用以下代码执行此操作:

library(plyr)
library(tidyverse)

file_list <- dir("./Data", full.names = TRUE)

col_widths <- rep.int(5, 4160)
data_import <- ldply(file_list, function(x) read_fwf(fwf_widths(col_widths), skip = 2))

这个returns错误:

 Error: `file` must be a string, raw vector or a connection. 

如果我这样做 read_fwf(file_list[[1]], fwf_widths(col_widths), skip = 2) 那么这确实成功地从单个文件导入数据。阻止 read_fwf 应用于 file_list 的每个元素的错误是什么?我是不是误解了 ldply 的作用?

非常感谢

会是 apply-familiy 的解决方案吗?

如果是,我建议如下:

file_list <- <-list.files(pattern = "*./Data")
file_list <-sapply(file_list , read_fwf)

您需要将数据作为 read_fwf 中的第一个参数传递。尝试:

data_import <- ldply(file_list, function(x) 
                      read_fwf(x, fwf_widths(col_widths), skip = 2))

plyr 已停用,因此您可能对这些替代解决方案感兴趣:

#Option 1
data_import <- purrr::map_df(file_list, function(x) 
                    read_fwf(x, fwf_widths(col_widths), skip = 2))

#Option 2
data_import <- do.call(rbind, lapply(file_list, function(x) 
                   read_fwf(x, fwf_widths(col_widths), skip = 2)))