Я использую R CMD BATCH my_script.R
терминал для выполнения R
сценария. Сейчас я нахожусь в той точке, где я хотел бы передать аргумент команде, но у меня возникли некоторые проблемы с его работой. Если я это сделаю, R CMD BATCH my_script.R blabla
то он blabla
станет выходным файлом, а не будет интерпретироваться как аргумент, доступный для выполняемого сценария R.
Я пробовал, Rscript my_script.R blabla
что, кажется, правильно передается blabla
в качестве аргумента, но тогда я не получаю my_script.Rout
выходной файл, с которым я получаю R CMD BATCH
(мне нужен .Rout
файл). Хотя я мог перенаправить вывод вызова Rscript
на имя файла по своему выбору, я не получал бы входные команды R, включенные в файл, как это R CMD BATCH
происходит в .Rout
файле.
Итак, в идеале я ищу способ передать аргументы сценарию R, выполняемому через этот R CMD BATCH
метод, хотя был бы доволен подходом, использующим, Rscript
если есть способ заставить его создать сопоставимый .Rout
файл.
R CMD BATCH
это реликвия. Что мне в нем нравится, так это то, что он создает.Rout
файл, который включает не только выходные данные сценария, но также чередует входные команды / комментарии из.R
файла сценария, создавшего этот вывод.R CMD BATCH
.R CMD BATCH
сknitr
, например ,Rscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(вы можете заменитьstitch
сstitch_rhtml
илиstitch_rmd
, и вам необходимо установитьknitr
из Github , так как я только что нашел ошибку вstitch
...)Rscript myfile.R > path/to/mylog.Rout
вместо вывода на стандартный вывод (экран) вывод файла сохраняется в вашем.Rout
файле.Rscript myfile.R | tee mylog.Rout
Попробовав описанные здесь варианты, я нашел этот пост от Forester в r-bloggers. Я думаю, что это чистый вариант для рассмотрения.
Я поместил его код сюда:
Из командной строки
Test.R
В test.out
Спасибо Forester !
источник
--args
это ключ. Он также работает сR --no-save --no-restore --args a=1 < test.R
иR --no-save --no-restore < test.R --args a=1
Вам нужно поставить аргументы перед
my_script.R
и использовать-
аргументы, напримерcommandArgs()
-blabla
в этом случае будет получена строка символов. Подробнее см. В справке:источник
args <- commandArgs(FALSE)
а затем print args, я получаю все аргументы, включая те, которые мне не принадлежат, например--restore
,--save
и т.д. Если я использую,commandArgs(TRUE)
я не получаю аргументов вообще. Есть ли способ получить только мои собственные дополнительные аргументы?--args
выглядит многообещающе, но мне не удалось заставить его работать ...В вашем сценарии R называется
test.R
:Из командной строки запустите:
Ваш выходной файл test.Rout покажет, что аргумент
4
был успешно передан R:источник
Я добавляю ответ, потому что считаю, что однострочное решение всегда хорошо! Поверх вашего
myRscript.R
файла добавьте следующую строку:Затем отправьте свой сценарий примерно так:
Например:
Затем:
источник
Вот еще один способ обработки аргументов командной строки, используя
R CMD BATCH
. Мой подход, основанный на предыдущем ответе здесь , позволяет вам указывать аргументы в командной строке и в вашем сценарии R указывать некоторые или все значения по умолчанию.Вот R-файл, который я назвал test.R :
В командной строке, если я наберу
тогда внутри R у нас будет
a
=2
иb
=c(2,5,6)
. Но я мог бы, скажем, опуститьb
и добавить еще один аргументc
:Тогда в R у нас будет
a
=2
,b
=c(1,1,1)
(по умолчанию) иc
="hello"
.Наконец, для удобства мы можем заключить код R в функцию, если мы заботимся о среде:
источник