Zoeken…


Invoering

Als u routinematig een R-analyse op veel afzonderlijke gegevensbestanden wilt toepassen, of een herhaalbare analysemethode voor andere mensen wilt bieden, is een uitvoerbaar R-script een gebruiksvriendelijke manier om dit te doen. In plaats van dat u of uw gebruiker R moet aanroepen en uw script moet uitvoeren in R via source(.) Of een functieaanroep, kan uw gebruiker het script zelf gewoon aanroepen alsof het een programma is.

Opmerkingen

Om de standaard invoer- / uitvoerkanalen weer te geven, gebruikt u het functiebestand file("stdin") (invoer van terminal of ander programma via pijp), stdout() (standaarduitvoer) en stderr() (standaardfout). Merk op dat hoewel er de functie stdin() , deze niet kan worden gebruikt bij het leveren van een kant-en-klaar script aan R, omdat het de volgende regels van dat script leest in plaats van gebruikersinvoer.

De basisstructuur van het zelfstandige R-programma en hoe het te noemen

Het eerste zelfstandige R-script

Zelfstandige R-scripts worden niet uitgevoerd door het programma R ( R.exe onder Windows), maar door een programma genaamd Rscript ( Rscript.exe ), dat standaard in uw R installatie is opgenomen.

Om dit feit te suggereren, beginnen zelfstandige R-scripts met een speciale regel genaamd Shebang-regel , die de volgende inhoud bevat: #!/usr/bin/env Rscript . Onder Windows is een aanvullende maatregel nodig, die later wordt beschreven.

Het volgende eenvoudige zelfstandige R-script slaat een histogram onder de bestandsnaam "hist.png" op van nummers die het als invoer ontvangt:

#!/usr/bin/env Rscript

# User message (\n = end the line)
cat("Input numbers, separated by space:\n")
# Read user input as one string (n=1 -> Read only one line)
input <- readLines(file('stdin'), n=1)
# Split the string at each space (\\s == any space)
input <- strsplit(input, "\\s")[[1]]
# convert the obtained vector of strings to numbers
input <- as.numeric(input)

# Open the output picture file
png("hist.png",width=400, height=300)
# Draw the histogram
hist(input)
# Close the output file
dev.off()

U ziet verschillende belangrijke elementen van een zelfstandig R-script. In de eerste regel ziet u de Shebang-regel. Vervolgens wordt cat("....\n") gebruikt om een bericht naar de gebruiker af te drukken. Gebruik file("stdin") wanneer u "Gebruikersinvoer op console" wilt opgeven als gegevensoorsprong. Dit kan worden gebruikt in plaats van een bestandsnaam in verschillende functies voor het lezen van gegevens ( scan , read.table , read.csv , ...). Nadat de gebruikersinvoer is geconverteerd van tekenreeksen naar getallen, begint het plotten. Daar is te zien dat plotopdrachten die bedoeld zijn om naar een bestand te worden geschreven, in twee opdrachten moeten worden ingesloten. Dit zijn in dit geval png(.) En dev.off() . De eerste functie is afhankelijk van het gewenste uitvoerbestandsformaat (andere veelgebruikte keuzes zijn jpeg(.) En pdf(.) ). De tweede functie, dev.off() is altijd vereist. Het schrijft de plot naar het bestand en beëindigt het plotproces.

Een stand-alone R-script voorbereiden

Linux / Mac

Het bestand van het zelfstandige script moet eerst uitvoerbaar worden gemaakt. Dit kan gebeuren door met de rechtermuisknop op het bestand te klikken, "Eigenschappen" in het openingsmenu te openen en het selectievakje "Uitvoerbaar" op het tabblad "Machtigingen" aan te vinken. Alternatief is het commando

chmod +x PATH/TO/SCRIPT/SCRIPTNAME.R

kan worden opgeroepen in een terminal.

ramen

Voor elk zelfstandig script moet een batchbestand worden geschreven met de volgende inhoud:

"C:\Program Files\R-XXXXXXX\bin\Rscript.exe" "%~dp0\XXXXXXX.R" %*

Een batchbestand is een normaal tekstbestand, maar met de extensie *.bat behalve de extensie *.txt . Maak het met behulp van een teksteditor zoals notepad (geen Word ) of iets dergelijks en plaats de bestandsnaam tussen aanhalingstekens "FILENAME.bat" ) in het dialoogvenster Opslaan. Als u een bestaand batchbestand wilt bewerken, klikt u erop met de rechtermuisknop en selecteert u "Bewerken".

Je moet de hierboven getoonde code overal aanpassen XXX... is geschreven:

  • Plaats de juiste map waar uw R-installatie zich bevindt
  • Voer de juiste naam van uw script in en plaats het in dezelfde map als dit batchbestand.

Verklaring van de elementen in de code: Het eerste deel "C:\...\Rscript.exe" vertelt Windows waar het programma Rscript.exe worden gevonden. Het tweede deel "%~dp0\XXX.R" vertelt Rscript om het R-script dat u hebt geschreven uit te voeren dat zich in dezelfde map bevindt als het batchbestand ( %~dp0 staat voor de batchbestandsmap). Ten slotte stuurt %* alle opdrachtregelargumenten die u aan het batchbestand geeft door naar het R-script.

Als u dubbelklikt op het batchbestand, wordt het R-script uitgevoerd. Als u bestanden naar het batchbestand sleept, worden de bijbehorende bestandsnamen aan het R-script gegeven als opdrachtregelargumenten.

Het gebruik van littler om R-scripts uit te voeren

littler (uitgesproken als little r ) ( cran ) biedt, naast andere functies, twee mogelijkheden om R-scripts uit te voeren vanaf de opdrachtregel met het r commando van littler (wanneer men met Linux of MacOS werkt).

Littler installeren

Van R:

install.packages("littler")

Het pad van r wordt in de terminal afgedrukt, zoals

You could link to the 'r' binary installed in
'/home/*USER*/R/x86_64-pc-linux-gnu-library/3.4/littler/bin/r'
from '/usr/local/bin' in order to use 'r' for scripting.

Om r vanaf de opdrachtregel van het systeem te kunnen bellen, is een symlink nodig:

ln -s /home/*USER*/R/x86_64-pc-linux-gnu-library/3.4/littler/bin/r /usr/local/bin/r

Apt-get gebruiken (Debian, Ubuntu):

sudo apt-get install littler

Littler gebruiken met standaard .r-scripts

Met r van littler is het mogelijk om zelfstandige R-scripts uit te voeren zonder het script te wijzigen. Voorbeeld script:

# User message (\n = end the line)
cat("Input numbers, separated by space:\n")
# Read user input as one string (n=1 -> Read only one line)
input <- readLines(file('stdin'), n=1)
# Split the string at each space (\\s == any space)
input <- strsplit(input, "\\s")[[1]]
# convert the obtained vector of strings to numbers
input <- as.numeric(input)

# Open the output picture file
png("hist.png",width=400, height=300)
# Draw the histogram
hist(input)
# Close the output file
dev.off()

Merk op dat er geen shebang bovenaan de scripts staat. Wanneer het wordt opgeslagen als bijvoorbeeld hist.r , kan het direct worden opgeroepen met de systeemopdracht:

r hist.r

Met behulp van Littler op shebanged scripts

Het is ook mogelijk om uitvoerbare R-scripts te maken met littler, met behulp van de shebang

#!/usr/bin/env r

bovenaan het script. Het bijbehorende R-script moet uitvoerbaar worden gemaakt met chmod +X /path/to/script.r en kan direct worden opgeroepen vanaf de systeemterminal.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow