使用 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)
})
我正在使用 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)
})