使用 lapply 和 read_xls 将文件名用作列表名称

Use filename as list name using lapply and read_xls

我正在使用 lapply 从一个目录中读入多个 .xls 文件。由于数据代表从文件名给出的不同 ID 的站点收集的数据,我想将列表名称设置为每个文件的文件名。

我目前正在做以下事情:

library(readxl)

# Set filepath
file_location="FILEPATH"
# List all files within folder
filenames=list.files(file_location, pattern="^ID.*xls",full.names = T) 
# Import all files
import_data=lapply(filenames, function(x) read_xls(x, col_names = T)) 

然后我可以 运行 像这样:

filenames_short=gsub(".xls", "", x=list.files(file_location, pattern="^ID.*xls",full.names = F))
names(import_data)=filenames_short

然而,我悲观的自我告诉我,文件名的顺序可能与列表的顺序不匹配。肯定有办法在原始命令中设置它吗?

我同意@jogo,但如果这会产生不安全性,您可以 return table 加上文件名。

一个选项是将属性添加到 table:

import_data=lapply(filenames, function(x) {
                   out <- read_xls(x, col_names = T)
                   attr(out, "file") <- x
                   return(out)
                   }) 

另一个是 return 一个列表,其中 table 是一个对象并且已经命名。

import_data=lapply(filenames, function(x) {
                   out <- list(read_xls(x, col_names = T))
                   names(out) <- gsub(".xls", "", x)
                   return(out)
                   })