R 语言文件读写、批量读取与图片保存实用代码汇总

发布于:2025-08-02 ⋅ 阅读:(31) ⋅ 点赞:(0)

在 R 语言数据分析与建模过程中,文件读写、批量数据处理及结果可视化保存是高频操作。无论是日常数据导入导出、多文件批量整合,还是绘图结果的高质量保存,掌握高效的实现方法能极大提升工作效率。本文整理了 R 语言中文件读写(含 TXT/CSV/Excel/R 格式)、批量读取多文件及图片保存的实用代码,附带关键参数说明和使用场景,方便大家在实际项目中直接复用。

一、文本文件(TXT/CSV)读写:高效处理结构化数据

文本文件是数据交换的常用格式,R 中readr包相比基础函数在速度和易用性上更具优势,尤其适合处理中大型 CSV/TXT 文件。

1. 读取 TXT/CSV 文件

# 加载readr包(需提前安装:install.packages("readr"))
library(readr)

# 读取CSV文件(自动解析列类型,速度快于基础read.csv)
data_csv <- read_csv("data.csv")  # 若文件在工作目录外,需指定完整路径如"E:/data/data.csv"

# 读取TSV或自定义分隔符的TXT文件(以制表符分隔为例)
data_txt <- read_delim("data.txt", delim = "\t")  # delim参数指定分隔符,如","";"等

2. 写入 TXT/CSV 文件

# 写入CSV文件(无行号,兼容Excel等工具)
write_csv(data_csv, "output_data.csv")  # 输出路径可自定义

# 写入TXT文件(指定分隔符,去除行号)
write.table(data_txt, "output_data.txt", sep = "\t", row.names = FALSE)  # sep指定分隔符,row.names=FALSE去除行号

二、Excel 文件读写:轻量高效的 openxlsx 包

处理 Excel 文件时,openxlsx包无需依赖 Java 环境,轻量且支持多工作表操作,是替代xlsx包的优选。

1. 读取 Excel 文件

# 加载openxlsx包(需提前安装:install.packages("openxlsx"))
library(openxlsx)

# 读取Excel指定工作表(默认读取第一个工作表)
df <- read.xlsx("input_data.xlsx", sheet = "Sheet1")  # sheet参数可指定工作表名或索引(如sheet=1)

2. 写入 Excel 文件(支持多工作表)

# 准备两个数据集
df1 <- data.frame(id = 1:3, name = c("A", "B", "C"))
df2 <- data.frame(date = Sys.Date() - 2:0, value = c(10, 20, 30))

# 写入多工作表Excel,自动调整列宽
write.xlsx(
  list("基础信息" = df1, "指标数据" = df2),  # 列表格式指定工作表名与对应数据
  "output_excel.xlsx", 
  colWidths = "auto"  # 自动调整列宽,避免内容截断
)

三、R 格式文件读写:高效保存数据对象

对于 R 语言特有的数据对象(如数据集、模型结果),使用.rds.RData格式保存可保留对象类型,避免重复解析。

1. 单对象保存:.rds 格式(推荐)

# 保存单个对象(如模型结果、数据集)
saveRDS(lm_model, "linear_model.rds")  # lm_model为已训练的线性回归模型

# 读取.rds对象(无需提前知道对象名)
loaded_model <- readRDS("linear_model.rds")  # 直接赋值给新变量,灵活度高

2. 多对象保存:.RData 格式

# 保存多个对象到.RData文件
save(df1, df2, lm_model, file = "multi_objects.RData")  # 可同时保存数据集和模型

# 加载.RData文件(对象名与保存时一致)
load("multi_objects.RData")  # 加载后直接使用df1、df2、lm_model等对象

注意:.rds 适合单个对象(灵活度高),.RData 适合多对象批量保存,按需选择即可。

四、绘图结果保存:高质量图片输出

数据分析中可视化结果需保存为图片时,需关注分辨率、尺寸和格式,确保在报告或论文中清晰展示。

常用图片格式保存代码

# 1. 保存为PNG格式(高分辨率,适合屏幕展示)
png(
  "scatter_plot.png",  # 输出文件名
  width = 2000, height = 1600,  # 尺寸(像素)
  res = 300  # 分辨率(dpi),300dpi适合印刷
)
plot(x = df$x, y = df$y, main = "散点图示例")  # 绘图代码
dev.off()  # 关闭绘图设备,必须执行

# 2. 保存为JPEG格式(压缩率可调,适合网络传输)
jpeg(
  "histogram.jpg", 
  width = 7, height = 5, units = "in",  # 尺寸单位为英寸(in)
  res = 300,  # 分辨率
  quality = 90  # 质量(1-100),越高压缩越小
)
hist(df$value, main = "直方图示例")
dev.off()

# 3. 保存为PDF格式(矢量图,无损缩放,适合论文)
pdf(
  "boxplot.pdf", 
  width = 10, height = 6  # PDF默认单位为英寸
)
boxplot(value ~ group, data = df, main = "箱线图示例")
dev.off()

关键说明dev.off()是关闭绘图设备的必须步骤,否则图片文件可能无法正常生成。

五、批量读取多文件:高效整合同类型数据

当文件夹中存在多个同格式(如 CSV)文件需要合并时,使用purrr包可快速实现批量读取与整合。

批量读取目录下所有 CSV 文件

# 加载purrr包(需提前安装:install.packages("purrr"))
library(purrr)
library(readr)  # 依赖read_csv函数

# 1. 获取目录下所有CSV文件路径
csv_files <- list.files(
  path = ".",  # 目标目录("."表示当前工作目录,可替换为具体路径如"E:/data")
  pattern = "*.csv",  # 匹配CSV文件的正则表达式
  full.names = TRUE  # 返回完整路径(含目录),避免路径错误
)

# 2. 批量读取并合并为单个数据框
all_data <- map_df(csv_files, read_csv)  # map_df自动合并结果,保留列名一致的列

# 查看合并结果
dim(all_data)  # 输出合并后的数据行数和列数
head(all_data)  # 查看前6行数据

扩展:若需区分数据来源,可在合并时添加 “文件名” 列:

all_data <- map_dfr(csv_files, ~{
  df <- read_csv(.x)
  df$source_file <- basename(.x)  # 添加文件名列
  return(df)
})

总结

本文整理了 R 语言中文件读写(TXT/CSV/Excel/R 格式)、批量数据读取及图片保存的核心代码,覆盖了日常数据分析中最常用的文件操作场景。实际使用时,可根据数据格式和需求调整参数(如文件路径、分辨率、分隔符等)。建议收藏本文,在需要时直接复用代码,减少重复查文档的时间成本。


网站公告

今日签到

点亮在社区的每一天
去签到