Подтвердить что ты не робот

Как передать аргументы командной строки, когда source() R файл

В одном R файле я планирую источник другого R файла, который поддерживает чтение двух аргументов командной строки. Это звучит как мелочи, но я не мог найти решение в Интернете. Любая помощь приветствуется.

4b9b3361

Ответ 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