В одном R файле я планирую источник другого R файла, который поддерживает чтение двух аргументов командной строки. Это звучит как мелочи, но я не мог найти решение в Интернете. Любая помощь приветствуется.
Как передать аргументы командной строки, когда source() R файл
Ответ 1
Я предполагаю, что источник script получает доступ к аргументам командной строки с помощью commandArgs
? Если это так, вы можете переопределить commandArgs
в родительском script, чтобы вернуть то, что вы хотите, когда оно вызывается в script, который вы используете. Чтобы узнать, как это будет работать:
file_to_source.R
print(commandArgs())
main_script.R
commandArgs <- function(...) 1:3
source('file_to_source.R')
выходы [1] 1 2 3
Если ваш основной script не принимает никаких аргументов командной строки, вы также можете просто предоставить аргументы этому script.
Ответ 2
Самое простое решение - заменить source()
на system()
и paste
. Попробуйте
arg1 <- 1
arg2 <- 2
system(paste("Rscript file_to_source.R",arg1, arg2))
Ответ 3
Если у вас есть один script, который выдает другой script, вы можете определить переменные в первом, которые могут использоваться исходным кодом script.
> tmpfile <- tempfile()
> cat("print(a)", file=tmpfile)
> a <- 5
> source(tmpfile)
[1] 5
Ответ 4
Расширенная версия ответа @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