在一个R文件中,我计划获取另一个支持读取两个命令行参数的R文件。这听起来像是一个琐事任务,但我无法在网上找到解决方案。任何帮助表示赞赏。
我假设源脚本使用commandArgs
访问命令行参数?如果是这样,您可以在父脚本中覆盖commandArgs
,以便在您要采购的脚本中调用它时所需的内容。要了解这将如何工作:
file_to_source.R
print(commandArgs())
main_script.R
commandArgs <- function(...) 1:3
source('file_to_source.R')
输出[1] 1 2 3
如果您的主脚本本身不接受任何命令行参数,您也可以只为此脚本提供参数。
最简单的解决方案是用source()
和system()
替换paste
。尝试
arg1 <- 1
arg2 <- 2
system(paste("Rscript file_to_source.R", arg1, arg2))
如果您有一个脚本来源另一个脚本,您可以在第一个脚本中定义可以由源脚本使用的变量。
> tmpfile <- tempfile()
> cat("print(a)", file=tmpfile)
> a <- 5
> source(tmpfile)
[1] 5
@Matthew Plourde答案的扩展版本。我通常做的是使用if语句检查命令行参数是否已定义,否则读取它们。
另外,我尝试使用argparse库来读取命令行参数,因为它提供了更整洁的语法和更好的文档。
要采购的文件
if (!exists("args")) {
suppressPackageStartupMessages(library("argparse"))
parser <- ArgumentParser()
parser$add_argument("-a", "--arg1", type="character", defalt="a",
help="First parameter [default %(defult)s]")
parser$add_argument("-b", "--arg2", type="character", defalt="b",
help="Second parameter [default %(defult)s]")
args <- parser$parse_args()
}
文件调用源()
args$arg1 = "c"
args$arg2 = "d"
source ("file_to_be_sourced.R")
print (args)
c,d