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

如何在R中读取未知数量与名称的Parquet文件并生成以文件名命名的列表

在R中读取多个Parquet文件并生成命名列表

我来帮你搞定这个问题~你之前的代码报错,核心原因是你用c()初始化的是原子向量,而R的原子向量没办法存储数据框这种复杂对象,所以赋值的时候就会出现"替换的项目数量不是替换长度的倍数"的错误。下面给你两种靠谱的解决方法:

方法1:修改你的循环逻辑

只需要把初始化的对象改成列表,并且用双重方括号给列表元素赋值就行:

library("arrow")

# 可以手动指定文件名,也可以自动获取目录下的文件
file_names = c('a.parquet', 'B.parquet')
# 初始化空列表,而非向量
daten <- list()

for (pf in file_names) {
    # 提取去掉后缀的文件名作为列表元素名
    df_name <- strsplit(pf, ".", fixed=TRUE)[[1]][1]
    df <- arrow::read_parquet(pf)
    # 用双重方括号给命名列表元素赋值
    daten[[df_name]] <- df
}

循环结束后,daten就是你想要的命名列表,比如用daten[["a"]]就能直接访问第一个文件对应的数据集。

方法2:更简洁的R风格写法(推荐)

用lapply可以省去手动写循环的麻烦,代码更简洁高效,还能自动批量处理文件:

library(arrow)
# 自动获取当前目录下所有Parquet文件(如果需要指定目录,修改path参数即可)
file_names <- list.files(path = ".", pattern = "\\.parquet$", full.names = FALSE)

# 读取所有文件并生成列表
all_data <- lapply(file_names, function(file) {
  arrow::read_parquet(file)
})

# 给列表元素设置名称(去掉文件后缀)
names(all_data) <- sapply(file_names, function(file) {
  strsplit(file, ".", fixed = TRUE)[[1]][1]
})

如果觉得处理文件名后缀的代码有点繁琐,可以用fs包的path_ext_remove函数,一行搞定后缀去除:

library(fs)
names(all_data) <- path_ext_remove(file_names)

验证结果

运行完代码后,你可以用names(all_data)查看所有列表元素的名称,用all_data[["你的文件名"]]直接访问对应的数据框,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:47:42