Очень удобно иметь сценарии R для выполнения простых графиков из командной строки. Однако запуск R из сценариев bash совсем не удобен. Идеальным может быть что-то вродеКаков наилучший способ использования R-скриптов в командной строке (терминале)?
#!/path/to/R
...
или
#!/usr/bin/env R
...
, но я не был в состоянии сделать любой из этих работ.
Другой вариант - сохранить скрипты исключительно в R, например. script.R
, и ссылаясь на него с R --file=script.R
или аналогичным. Однако иногда сценарий будет опираться на неясные ключи командной строки, в которых точечная часть кода существует вне сценария. Пример: прокрасть вещи в R из bash через локальный .Rprofile, нужные ключи - это все, что есть --vanilla
, за исключением --no-init-file
.
Другой вариант - это скрипт bash для хранения R-флагов и безболезненно исполняемый, который затем вызывает сценарий R. Проблема состоит в том, что это означает, что одна программа просто разделилась на два файла, которые теперь нужно синхронизировать, переносить на новые машины вместе и т. Д.
Опция, которую я в настоящее время наименее презираю, встраивает R в сценарий bash :
#!/bin/bash
... # usage message to catch bad input without invoking R
... # any bash pre-processing of input
... # etc
R --random-flags <<RSCRIPT
# R code goes here
RSCRIPT
Все в одном файле. Он является исполняемым и легко обрабатывает аргументы. Проблема в том, что объединение bash и R, как это, в значительной степени устраняет возможность того, что какая-либо IDE не терпит неудачу на том или ином, и заставляет мое сердце болеть.
Есть ли какой-нибудь лучший способ, которого я не хватает?
Да, я думаю, что это «официальный» способ сделать это. – Frank
И запуск 'Rscript --help' из командной строки перечислит множество полезных опций, которые могут быть добавлены к shebang, например' --vanilla'. – flodel
Давайте также упомянуть функцию 'commandArgs' и пакеты' getopt' и 'optparse' для синтаксического анализа командной строки. Таким образом, аргументы и параметры также могут передаваться вашим сценариям при запуске из командной строки. – flodel