Аргументы командной строки в bash в Rscript

У меня есть bash script, который создает файл csv и R файл, который создает из него графики.

В конце bash script я вызываю Rscript Graphs.R 10

Ответ, который я получаю, выглядит следующим образом:

Error in is.vector(X) : subscript out of bounds
Calls: print ... <Anonymous> -> lapply -> FUN -> lapply -> is.vector
Execution halted

Первые несколько строк моих Graphs.R:

#!/bin/Rscript
args <- commandArgs(TRUE)
CorrAns = args[1]

Не знаю, что я делаю неправильно? Совет в сети кажется мне сказать, что это должно сработать. Его очень трудно понять commandArgs

Ответы

Ответ 1

В args.R

указано следующее:
print(commandArgs(TRUE)[1])

и следующее в args.sh

Rscript args.R 10

Я получаю следующий вывод из bash args.sh

[1] "10"

и никаких ошибок. При необходимости конвертируйте в числовой тип с помощью as.numeric(commandArgs(TRUE)[1]).

Ответ 2

Просто догадайтесь, возможно, вам нужно преобразовать CorrAns из символа в числовое, так как в разделе "Значение" ?CommandArgs говорится:

Символьный вектор, содержащий имя исполняемого файла и предоставленные пользователем параметры командной строки.

UPDATE: это может быть так просто:

#!/bin/Rscript
args <- commandArgs(TRUE)
(CorrAns = args[1])
(CorrAns = as.numeric(args[1]))

Ответ 3

Считывая docs, кажется, вам может потребоваться удалить TRUE из вызова commandArgs(), поскольку вы не вызываете script с --args. Либо это, либо вам нужно позвонить Rscript Graphs.R --args 10.

Использование

commandArgs(trailingOnly = FALSE)

Аргументы

trailingOnly логический. Только аргументы после --args будут возвращены?

Ответ 4

Rscript args.R 10 где 10 - это числовое значение, которое мы хотим передать в R script.

print(as.numeric(commandArgs(TRUE)[1]) выводит значение, которое затем может быть присвоено переменной.