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

如何让R脚本支持命令行调用以生成指定图表与文件?

问题

我在Linux命令行调用R脚本生成图表和CSV文件,现有脚本testing.R代码如下:

input <- mtcars[,c('mpg','cyl')]

write.table(input, "mtcars.csv")

pdf("boxplot.pdf")
boxplot(mpg ~ cyl, data = mtcars, xlab = "Number of Cylinders",
        ylab = "Miles Per Gallon", main = "Mileage Data")
dev.off()

执行命令Rscript testing.R mtcars.csv boxplot.pdf后,只输出:

null device 
          1 

想问两个问题:

  1. 图表和CSV文件是否已经生成?
  2. 怎么修改脚本,让它能从命令行接收指定的输出文件名?
解答

1. 文件已生成

null device 1是dev.off()的正常输出,代表PDF绘图设备已成功关闭,说明文件已经生成。但你当前的脚本硬编码了输出文件名,所以不管命令行传了什么参数,都会生成mtcars.csv和boxplot.pdf,命令行传入的参数并没有被脚本读取。你可以在当前目录执行ls命令查看这两个文件是否存在。

2. 修改脚本支持命令行参数

使用R的commandArgs()函数可以获取命令行传入的参数,修改后的脚本如下:

# 只获取命令行中脚本名之后的参数
args <- commandArgs(trailingOnly = TRUE)

# 检查参数数量是否正确
if (length(args) != 2) {
  stop("用法:Rscript testing.R <CSV输出路径> <PDF输出路径>")
}

# 赋值输出路径
csv_path <- args[1]
pdf_path <- args[2]

# 处理数据
input <- mtcars[,c('mpg','cyl')]

# 写入CSV(建议添加row.names=FALSE避免输出行号,sep=","让文件标准CSV格式)
write.table(input, csv_path, row.names = FALSE, sep = ",")

# 生成PDF图表
pdf(pdf_path)
boxplot(mpg ~ cyl, data = mtcars, xlab = "Number of Cylinders",
        ylab = "Miles Per Gallon", main = "Mileage Data")
dev.off()

执行修改后的脚本

在命令行运行:

Rscript testing.R my_custom_data.csv my_custom_plot.pdf

执行完成后,你指定的两个文件会生成在当前目录(如果指定了绝对路径则生成到对应位置),null device 1的提示依然会出现,这是正常现象,不影响文件生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:02:47