Tenho usado R CMD BATCH my_script.R
de um terminal para executar um R
script. Agora estou no ponto em que gostaria de passar um argumento para o comando, mas estou tendo alguns problemas para fazê-lo funcionar. Se eu fizer isso, R CMD BATCH my_script.R blabla
ele blabla
se tornará o arquivo de saída, em vez de ser interpretado como um argumento disponível para o script R sendo executado.
Eu tentei o Rscript my_script.R blabla
que parece passar blabla
corretamente como um argumento, mas não consigo o my_script.Rout
arquivo de saída que recebo com R CMD BATCH
(quero o .Rout
arquivo). Embora eu pudesse redirecionar a saída de uma chamada para Rscript
para um nome de arquivo de minha escolha, eu não obteria os comandos de entrada R incluídos no arquivo da maneira que R CMD BATCH
acontece no .Rout
arquivo.
Portanto, idealmente, estou procurando uma maneira de passar argumentos para um script R que está sendo executado por meio do R CMD BATCH
método, embora ficaria feliz com uma abordagem usando Rscript
se houver uma maneira de fazê-lo produzir um .Rout
arquivo comparável .
R CMD BATCH
é uma relíquia. O que eu gosto nele é que ele produz um.Rout
arquivo que inclui não apenas a saída do script, mas também intercala os comandos / comentários de entrada do.R
arquivo de script que produziu essa saída.R CMD BATCH
.R CMD BATCH
comknitr
, por exemploRscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(você pode substituirstitch
porstitch_rhtml
oustitch_rmd
e precisa instalarknitr
do Github, pois acabei de encontrar um bug emstitch
...)Rscript myfile.R > path/to/mylog.Rout
e em vez de ser impresso em stdout (a tela), a saída do arquivo é salva em seu.Rout
arquivo.Rscript myfile.R | tee mylog.Rout
Depois de tentar as opções descritas aqui, encontrei este post do Forester no r-bloggers. Acho que é uma opção limpa a se considerar.
Eu coloquei seu código aqui:
Da linha de comando
Test.R
Em test.out
Graças a Forester !
fonte
--args
é a chave. Também funciona comR --no-save --no-restore --args a=1 < test.R
eR --no-save --no-restore < test.R --args a=1
Em seu script R, chamado
test.R
:Na linha de comando, execute:
Seu arquivo de saída, test.Rout, mostrará que o argumento
4
foi passado com sucesso para R:fonte
Você precisa colocar argumentos antes
my_script.R
e usar-
nos argumentos, por exemplocommandArgs()
receberá-blabla
como string de caracteres neste caso. Consulte a ajuda para obter detalhes:fonte
args <- commandArgs(FALSE)
e, em seguida, imprimir args, eu acabar com todos os argumentos, incluindo os que não são minhas, como--restore
,--save
, etc. Se eu usarcommandArgs(TRUE)
fico sem argumentos em tudo. Existe uma maneira de obter apenas meus próprios argumentos adicionais?--args
parece promissor, mas não consegui fazer funcionar ...Acrescento uma resposta porque acho que uma solução de uma linha é sempre boa! No topo do seu
myRscript.R
arquivo, adicione a seguinte linha:Em seguida, envie seu script com algo como:
Por exemplo:
Então:
fonte
Esta é outra maneira de processar argumentos de linha de comando, usando
R CMD BATCH
. Minha abordagem, que se baseia em uma resposta anterior aqui , permite especificar argumentos na linha de comando e, em seu script R, fornecer alguns ou todos os valores padrão.Aqui está um arquivo R, que chamo de test.R :
Na linha de comando, se eu digitar
então dentro de R teremos
a
=2
eb
=c(2,5,6)
. Mas eu poderia, digamos, omitirb
e acrescentar outro argumentoc
:Então, em R, teremos
a
=2
,b
=c(1,1,1)
(o padrão) ec
="hello"
.Finalmente, por conveniência, podemos envolver o código R em uma função, desde que sejamos cuidadosos com o ambiente:
fonte