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

如何加速将含12个工作表的XLSX文件读取到R中?

优化建议

1. 换用openxlsx2包读取,大幅降低解析开销

readxl依赖C语言的libxls库,对Excel格式的兼容性处理开销大;而openxlsx2是纯R实现的XLSX读写工具,针对规整表格的读取速度远快于readxl。

示例代码:

library(openxlsx2)
# 一次性读取所有工作表,返回命名列表
my_data <- read_xlsx("foo.xlsx", sheets = NULL, col_names = FALSE)

2. 精准指定数据读取范围,跳过无关行

你的工作表中只有14行是有效数据(7组x/y行),其余是表头和空行。直接指定读取范围,避免工具解析无关内容:

示例(readxl兼容版):

library(readxl)
my_sheets <- excel_sheets("foo.xlsx")
my_data <- vector("list", length(my_sheets))

# 根据实际格式调整范围,比如有效数据在第3-26行
for(i in seq_along(my_sheets)){
  my_data[[i]] <- read_excel(
    path = "foo.xlsx", 
    sheet = my_sheets[i],
    col_names = FALSE,
    range = cell_rows(3:26)
  )
}

3. 预定义列类型,避免类型猜测

Excel读取工具默认会逐列猜测数据类型,这会增加大量解析时间。提前指定所有列的类型(比如全部为数值型):

示例:

col_types <- rep("numeric", 202) # 202列均为数值型

my_data <- lapply(my_sheets, function(sheet){
  read_excel(
    "foo.xlsx", 
    sheet = sheet,
    col_names = FALSE,
    col_types = col_types
  )
})

4. 放弃并行读取,改用单线程

你的测试显示并行读取未提速甚至变慢,核心原因是单个工作表数据量极小,并行进程的启动、文件IO竞争的开销远大于并行带来的收益。对于这种小文件,单线程读取效率更高。

5. 长期方案:仪器直接导出CSV格式

如果仪器支持导出CSV,直接导出为单个样本对应一个CSV文件,用vroom读取速度会提升数倍:

library(vroom)
csv_files <- list.files("your_data_dir", pattern = "\\.csv$", full.names = TRUE)
# 读取所有CSV并保留列表格式
my_data <- lapply(csv_files, vroom, col_names = FALSE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:32:33