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