Voer het R-script uit vanaf de opdrachtregel

Ik heb een bestand, genaamd a.r, het heeft een chmodvan 755,

sayHello <- function(){
   print('hello')
}
sayHello()

Hoe kan ik dit uitvoeren via de opdrachtregel?


Antwoord 1, autoriteit 100%

Als u wilt dat de uitvoer naar de terminal wordt afgedrukt, kunt u het beste Rscript gebruiken

Rscript a.R

Houd er rekening mee dat wanneer u R CMD BATCH a.Rgebruikt, in plaats van de uitvoer naar standard out om te leiden en op de terminal weer te geven, een nieuw bestand met de naam a.Rout wordt aangemaakt.

R CMD BATCH a.R
# Check the output
cat a.Rout

Een ander ding om op te merken over het gebruik van Rscript is dat het niet standaard het pakket methodslaadt, wat verwarring kan veroorzaken. Dus als je vertrouwt op iets dat methoden bieden, moet je het expliciet in je script laden.

Als je echt de ./a.R-manier wilt gebruiken om het script aan te roepen, kun je een geschikt #!bovenaan het script toevoegen

#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}
sayHello()

Ik zal ook opmerken dat als je op een *unix-systeem draait, er de handige littler is pakket dat een gemakkelijke opdrachtregelleiding naar R biedt. Het kan nodig zijn om littler te gebruiken om glanzende apps via een script uit te voeren? Meer details vindt u in deze vraag.


Antwoord 2, autoriteit 18%

Dit is geen direct antwoord op de vraag. Maar misschien komt iemand hier terecht omdat hij vanaf de terminal een oneliner van R wil draaien. Als je bijvoorbeeld gewoon wat ontbrekende pakketten wilt installeren en wilt afsluiten, kan deze oneliner erg handig zijn. Ik gebruik het veel als ik er plotseling achter kom dat ik een aantal pakketten mis, en ik wil ze installeren waar ik wil.

  • Installeren op de standaardlocatie:

    R -e 'install.packages(c("package1", "package2"))'
    
  • Installeren op een locatie die root-rechten vereist:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 
    

Antwoord 3, autoriteit 7%

Een andere manier om een R-script vanaf de opdrachtregel uit te voeren is:

R < scriptName.R --no-save  

of met --save.

Zie ook Wat is de beste manier om R-scripts op de opdrachtregel (terminal) te gebruiken?.


Antwoord 4, autoriteit 3%

Je hebt de opdracht ?Rscriptnodig om een R-script vanaf de terminal uit te voeren.

Bekijk http://stat.ethz.ch/R -manual/R-devel/library/utils/html/Rscript.html

Voorbeeld

## example #! script for a Unix-alike
#! /path/to/Rscript --vanilla --default-packages=utils
args <- commandArgs(TRUE)
res <- try(install.packages(args))
if(inherits(res, "try-error")) q(status=1) else q()

Antwoord 5, autoriteit 2%

Hoe RMD-in-opdracht uitloopt met Knitr en Rmarchown door meerdere opdrachten en uploadt u vervolgens een HTML-bestand naar RPUBS

Hier is een voorbeeld: laad twee bibliotheken en voer een R-opdracht uit

R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'
R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'

Antwoord 6

Nog een andere manier om Rscript te gebruiken voor * UNIX-systemen is procesvervanging .

Rscript <(zcat a.r)
# [1] "hello"

wat uiteraard hetzelfde doet als het geaccepteerde antwoord, maar hiermee kunt u uw bestand manipuleren en uitvoeren zonder het de kracht van de opdrachtregel op te slaan, bijvoorbeeld.:

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"

Vergelijkbaar met Rscript -e "Rcode"Het maakt het mogelijk om uit te voeren zonder in een bestand op te slaan. Het kan dus worden gebruikt in combinatie met scripts die R-code genereren, b.v.:

Rscript <(echo "head(iris,2)")
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa

Antwoord 7

Alleen voor documentatie, soms moet u het script uitvoeren als sudo:

sudo Rscript path/to/your/file.R

Other episodes