You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数据导入命名列表?含lapply与purrr::map实现方法

给导入的CSV列表添加名称(含lapply/purrr实现)

问题场景

你已通过以下代码导出并导入CSV文件,但得到的imported_files列表没有名称:

# 导出数据为CSV
write.csv(mtcars, "mtcars.csv")
write.csv(iris, "iris.csv")

# 获取CSV文件列表
files <- list.files(pattern="*.csv")

# 循环导入文件
imported_files <- list()
for(i in seq_along(files)){
  imported_files[[i]] <- readr::read_csv(file = files[[i]])
}

# 查看列表名称
names(imported_files)
# NULL

你希望列表名称对应去掉.csv后缀的文件名,比如:

names(imported_files)
# "iris" "mtcars"

解决方案

1. 修改原循环代码

核心是先提取去掉后缀的文件名,再给列表元素直接命名:

# 获取文件名(自动去掉.csv后缀)
file_names <- tools::file_path_sans_ext(files)

# 循环导入时指定列表元素名称
imported_files <- list()
for(i in seq_along(files)){
  imported_files[[file_names[i]]] <- readr::read_csv(file = files[[i]])
}

# 验证名称
names(imported_files)
# 输出结果示例:"mtcars" "iris"(顺序由list.files返回的文件顺序决定)

2. 使用lapply实现

可以分两步完成,也可以用setNames一步到位:

file_names <- tools::file_path_sans_ext(files)

# 方法一:先导入再命名
imported_files <- lapply(files, readr::read_csv)
names(imported_files) <- file_names

# 方法二:一步完成
imported_files <- setNames(lapply(files, readr::read_csv), file_names)

3. 使用purrr::map实现

结合purrr的set_names函数,支持管道写法更简洁:

library(purrr)
file_names <- tools::file_path_sans_ext(files)

# 方法一:先map再命名
imported_files <- map(files, readr::read_csv)
imported_files <- set_names(imported_files, file_names)

# 方法二:管道一步完成
imported_files <- map(files, readr::read_csv) %>% 
  set_names(file_names)

补充说明

  • tools::file_path_sans_ext()是基础包自带的工具函数,比手动写正则匹配后缀更稳定可靠。
  • 如果需要固定列表元素的顺序,可以手动指定files的顺序,比如files <- c("mtcars.csv", "iris.csv")。

内容的提问来源于stack exchange,提问作者writer_typer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:01:57