bash run Qual é a melhor maneira de usar scripts R na linha de comando(terminal)?




run r program in terminal (10)

É muito conveniente ter scripts R para fazer plotagens simples a partir da linha de comando. No entanto, executar R de scripts bash não é conveniente. O ideal pode ser algo como

#!/path/to/R
...

ou

#!/usr/bin/env R
...

mas eu não consegui fazer nenhum desses trabalhos.

Outra opção é manter os scripts puramente em R, por exemplo, script.R , e invocá-lo com R --file=script.R ou similar. No entanto, ocasionalmente, um script dependerá de opções de linha de comando obscuras, em que ponto parte do código existe fora do script. Exemplo: introduzindo coisas no R do bash através de um .Rprofile local, os switches desejados são então tudo - --vanilla implica exceto --no-init-file .

Outra opção é um script bash para armazenar os sinalizadores R e ser executável sem dor, o que chama o script R. O problema é que isso significa que um único programa acabou de ser dividido em dois arquivos, que agora precisam ser mantidos em sincronia, transferidos para novas máquinas, etc.

A opção que menos preocupo atualmente é embutir o R ​​em um script 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

Tudo está em um único arquivo. É executável e lida facilmente com argumentos. O problema é que combinando bash e R como isso praticamente elimina a possibilidade de qualquer IDE não falhar em um ou outro, e faz meu coração doer muito mal.

Existe alguma maneira melhor que eu estou perdendo?


#!/path/to/R não funcionará porque R é um script, então execve é infeliz.

Eu uso R --slave -f script


Tente smallR para escrever scripts R rápidos na linha de comando:

http://code.google.com/p/simple-r/

(comando r no diretório)

Plotar a partir da linha de comando usando smallR ficaria assim:

r -p file.txt


Tente littler . littler fornece recursos de hash-bang (isto é, script começando com #! / algum / caminho) para o GNU R, bem como simples uso de linhas de comando e tubulações.


Conteúdo do script.r :

#!/usr/bin/Rscript

cat("Hello")

Invocação da linha de comando:

./script.r

Isso funciona,

#!/usr/bin/Rscript

mas eu não sei o que acontece se você tiver mais de uma versão do R instalada em sua máquina.

Se você fizer assim

#!/usr/bin/env Rscript

ele diz ao intérprete para usar qualquer R que aparecer primeiro em seu caminho.


Você pode querer usar o módulo rpy2 do python. No entanto, a maneira "certa" de fazer isso é com R CMD BATCH. Você pode modificar isso para gravar em STDOUT, mas o padrão é gravar em um arquivo .Rout. Veja o exemplo abaixo:

[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

Nota: você vai querer experimentar o --vanilla e outras opções para remover todos os arquivos de inicialização.


A resposta de Miguel Sanchez é como deveria ser. A outra maneira de executar o Rscript poderia ser o comando 'env' para executar o RScript em todo o sistema.

#!/usr/bin/env Rscript

Apenas uma nota para adicionar a este post. Versões posteriores de R parecem ter enterrado o Rscript um pouco. Para R 3.1.2-1 no OSX baixado em janeiro de 2015, encontrei o Rscript em

/sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript

Então, ao invés de algo como #! /sw/bin/Rscript #! /sw/bin/Rscript , eu precisava usar o seguinte no topo do meu script.

#! /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript

O locate Rscript pode ser útil para você.


O seguinte funciona para mim usando MSYS bash no Windows - eu não tenho R na minha caixa Linux, então não posso tentar lá. Você precisa de dois arquivos - o primeiro chamado runr executa R com um parâmetro de arquivo

# this is runr
# following is path to R on my Windows machine
# plus any R params you need
c:/r/bin/r --file=$1

Você precisa fazer este executável com chmod + x runr .

Então, no seu arquivo de script:

#!runr
# some R commands
x = 1
x

Note o #! A linha runr pode precisar incluir o caminho completo para runr, dependendo de como você está usando o comando, como sua variável PATH está definida, etc.

Não é bonito, mas parece funcionar!





r