Каков наилучший способ использования 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 не потерпит неудачу на одном или другом, и заставляет мое сердце болеть очень плохо.



есть ли какой-то лучший способ, который я пропустил?

549   12  

12 ответов:

контент script.r:

#!/usr/bin/Rscript

cat("Hello")

вызов из командной строки:

./script.r

попробовать меньше. 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/Rscript

The 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 на сервере?

http://www.rstudio.com/products/rstudio/download-server/

Comments

    Ничего не найдено.