Аргументы командной строки в 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])
выводит значение, которое затем может быть присвоено переменной.