[英]Passing arguments to R script in command line (shell/bash): what to do when column names contain tilde (~)
我正在利用Rscript
通过 bash 运行 R 脚本,并且我想指定要传递给脚本本身内函数的参数。 具体来说,我想传递指定的参数:
.csv
) 和 当列名包含波浪号 ( ~
) 时,我遇到了问题。 我试过用反引号包裹列名,但仍然不成功。
我想编写一个脚本,它接收.csv
格式的数据文件,并根据用户的选择为一个变量绘制直方图。
plot_histogram <- function(path_to_input, x_var) {
data_raw <- read.csv(file = path_to_input)
path_to_output_folder <- dirname(path_to_input)
png(filename = paste0(path_to_output_folder, "/", "output_plot.png"))
hist(as.numeric(na.omit(data_raw[[x_var]])), main = "histogram", xlab = "my_var")
replicate(dev.off(), n = 20)
}
set.seed(123)
df <- data.frame(age = sample(20:80, size = 100, replace = TRUE))
write.csv(df, "some_age_data.csv")
plot_histogram(path_to_input = "some_age_data.csv",
x_var = "age")
正如预期的那样,我得到了一个带有绘图的.png
文件,保存到.csv
所在的同一目录中
plot_histogram.R
args <- commandArgs(trailingOnly = TRUE)
## same function as above
plot_histogram <- function(path_to_input, x_var) {
data_raw <- read.csv(file = path_to_input)
path_to_output_folder <- dirname(path_to_input)
png(filename = paste0(path_to_output_folder, "/", "output_plot.png"))
hist(as.numeric(na.omit(data_raw[[x_var]])), main = "histogram", xlab = "my_var")
replicate(dev.off(), n = 20)
}
plot_histogram(path_to_input = args[1], x_var = args[2])
然后使用Rscript
通过命令行运行
$ Rscript --vanilla plot_histogram.R /../../../some_age_data.csv "age"
也有效!
第 1 步:创建假数据
library(tibble)
set.seed(123)
df <- tibble(`age-blah~value` = sample(20:80, size = 100, replace = T))
write.csv(df, "some_age_data.csv")
第 2 步:使用Rscript
:
$ Rscript --vanilla plot_histogram.R /../../../some_age_data.csv "age-blah~value"
hist.default(as.numeric(na.omit(data_raw[[x_var]])), main = "histogram", : 'breaks' 调用次数无效:plot_histogram -> hist -> hist.default 执行停止
使用Rscript
,如何传递指定包含波浪号的列名的参数? 或者,如何在Rscript
的框架内处理列名中具有这种波浪号格式的.csv
文件?
谢谢!
您正在成功传递一个参数,该参数指定包含波浪号的列名。 但是, read.csv
已经“固定”了列名,因此它实际上并不包含波浪号。
read.csv
正在默默地将列名转换为age.blah.value
。 使用check.names = FALSE
使其成为age-blah~value
。
data_raw <- read.csv(file = path_to_input, check.names = FALSE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.