Каков наилучший способ использования R-скриптов в командной строке (терминале)?
очень удобно иметь R-скрипты для выполнения простых графиков из командной строки. Однако запуск R из сценариев bash совсем не удобен. Идеальным может быть что-то вроде
#!/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 не потерпит неудачу на одном или другом, и заставляет мое сердце болеть очень плохо.
есть ли какой-то лучший способ, который я пропустил?
12 ответов:
попробовать меньше.
littlerобеспечивает hash-bang (т. е. скрипт, начинающийся с #!/some / path) возможность для GNU R, а также простое использование командной строки и трубопроводов.
#!/path/to/Rне будет работать, потому что R сам по себе скрипт, так чтоexecveнесчастен.Я использую
R --slave -f script
ответ Мигеля Санчеса таков, каким он должен быть. Другим способом выполнения Rscript может быть команда " env " для запуска системного RScript.
#!/usr/bin/env Rscript
Если вы заинтересованы в разборе аргументов командной строки для сценария R, попробуйте RScript, который поставляется с R начиная с версии 2.5.x
http://stat.ethz.ch/R-manual/R-patched/library/utils/html/Rscript.html
это работает.
#!/usr/bin/Rscriptно я не знаю, что произойдет, если на вашем компьютере установлено более 1 версии R.
Если вы делаете это так
#!/usr/bin/env RscriptОн говорит интерпретатору просто использовать то, что R появляется первым на вашем пути.
хочу добавить к этому посту. Более поздние версии
RКажется, похоронилиRscriptнесколько. Для R 3.1.2-1 на OSX скачал Jan 2015 я нашелRscriptна/sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/RscriptИтак, вместо чего-то вроде
#! /sw/bin/Rscript, мне нужно было использовать следующее в верхней части моего скрипта.#! /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/RscriptThe
locate Rscriptможет быть полезным для вас.
Если программа, которую вы используете для выполнения вашего скрипта, нуждается в параметрах, вы можете поместить их в конец #! линия:
#!/usr/bin/R --random --switches --fне зная R, я не могу проверить правильно, но это, кажется, работает:
axa@artemis:~$ cat r.test #!/usr/bin/R -q -f error axa@artemis:~$ ./r.test > #!/usr/bin/R -q -f > error Error: object "error" not found Execution halted axa@artemis:~$
возможно, вы захотите использовать модуль rpy2 python. Однако "правильный" способ сделать это-с помощью пакета R CMD. Вы можете изменить это, чтобы записать в STDOUT, но по умолчанию это запись в a .Разгромный файл. Смотрите пример ниже:
[ramanujan:~]$cat foo.R print(rnorm(10)) [ramanujan:~]$R CMD BATCH foo.R [ramanujan:~]$cat foo.Rout R version 2.7.2 (2008-08-25) Copyright (C) 2008 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restored] ~/.Rprofile loaded. Welcome at Fri Apr 17 13:33:17 2009 > print(rnorm(10)) [1] 1.5891276 1.1219071 -0.6110963 0.1579430 -0.3104579 1.0072677 -0.1303165 0.6998849 1.9918643 -1.2390156 > Goodbye at Fri Apr 17 13:33:17 2009 > proc.time() user system elapsed 0.614 0.050 0.721Примечание: Вы хотите попробовать --vanilla и другие варианты, чтобы удалить все запуска cruft.
попробуйте smallR для написания быстрых R скриптов в командной строке:
http://code.google.com/p/simple-r/
( в каталоге)
построение из командной строки с помощью smallR будет выглядеть так:
r -p file.txt
следующие работы для меня с помощью MSYS bash на Windows-у меня нет R на моем Linux box, поэтому не могу попробовать его там. Вам нужно два файла - первый называется runr выполняет R с параметром file
# this is runr # following is path to R on my Windows machine # plus any R params you need c:/r/bin/r --file=вам нужно сделать этот исполняемый файл с chmod +x runr.
затем в файле скрипта:
#!runr # some R commands x = 1 xобратите внимание на #! линия runr, возможно, потребуется указать полный путь к runr, в зависимости от того, как вы используете команду, как ваша переменная пути установлена и т. д.
не очень, но это, кажется, работает!
вы когда-нибудь знали, что вы можете использовать свой браузер для использования RStudio на сервере?
Comments