R Language
Standardisera analyser genom att skriva fristående R-skript
Sök…
Introduktion
Om du rutinmässigt vill använda en R-analys på många separata datafiler, eller tillhandahålla en repeterbar analysmetod till andra människor, är ett körbart R-skript ett användarvänligt sätt att göra det. Istället för att du eller din användare måste ringa R
och köra ditt skript inuti R via source(.)
Eller ett funktionssamtal, kan din användare helt enkelt ringa själva skriptet som om det var ett program.
Anmärkningar
För att representera standardinmatnings- / utgångskanalerna använder du funktionsfilen file("stdin")
(ingång från terminal eller annat program via rör), stdout()
(standardutgång) och stderr()
(standardfel). Observera att även om det finns funktionen stdin()
, kan den inte användas när man tillhandahåller ett färdigt skript till R, eftersom det kommer att läsa de nästa raderna i det skriptet istället för användarinmatning.
Den grundläggande strukturen för fristående R-program och hur man kallar det
Det första fristående R-skriptet
Fristående R-skript körs inte av programmet R
( R.exe
under Windows), utan av ett program som heter Rscript
( Rscript.exe
), som som standard ingår i din R
installation.
För att antyda detta faktum, fristående R-skript börjar med en speciell rad som heter Shebang-linje , som innehåller följande innehåll: #!/usr/bin/env Rscript
. Under Windows behövs ytterligare en åtgärd, som senare avlägsnas.
Följande enkla fristående R-skript sparar ett histogram under filnamnet "hist.png" från siffror som det får som input:
#!/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()
Du kan se flera viktiga element i ett fristående R-skript. I den första raden ser du Shebang-linjen. Därefter används cat("....\n")
för att skriva ut ett meddelande till användaren. Använd file("stdin")
när du vill ange "Användarinmatning på konsolen" som ett dataursprung. Detta kan användas istället för ett filnamn i flera read.table
( scan
, read.table
, read.csv
, ...). När användarinmatningen har konverterats från strängar till siffror, börjar plottningen. Där kan man se att plottkommandon som är avsedda att skrivas till en fil måste bifogas i två kommandon. Dessa är i detta fall png(.)
Och dev.off()
. Den första funktionen beror på önskat utdatafilformat (andra vanliga val är jpeg(.)
Och pdf(.)
). Den andra funktionen, dev.off()
krävs alltid. Den skriver handlingen till filen och avslutar planeringsprocessen.
Förbereder ett fristående R-skript
Linux / Mac
Det fristående skriptets fil måste först göras körbar. Detta kan hända genom att högerklicka på filen, öppna "Egenskaper" i öppningsmenyn och markera kryssrutan "Exekverbar" under fliken "Behörigheter". Alternativt kommandot
chmod +x PATH/TO/SCRIPT/SCRIPTNAME.R
kan kallas i en terminal.
Windows
För varje fristående skript måste en batchfil skrivas med följande innehåll:
"C:\Program Files\R-XXXXXXX\bin\Rscript.exe" "%~dp0\XXXXXXX.R" %*
En batchfil är en vanlig textfil, men som har en *.bat
förlängning förutom en *.txt
förlängning. Skapa det med en textredigerare som notepad
(inte Word
) eller liknande och placera filnamnet i citattecken "FILENAME.bat"
) i spara dialogrutan. För att redigera en befintlig batchfil, högerklicka på den och välj "Redigera".
Du måste anpassa koden som visas ovan överallt där XXX...
är skriven:
- Sätt i rätt mapp där din R-installation finns
- Sätt in rätt namn på ditt skript och placera det i samma katalog som denna batchfil.
Förklaring av elementen i koden: Den första delen "C:\...\Rscript.exe"
berättar för Windows var Rscript.exe
programmet finns. Den andra delen "%~dp0\XXX.R"
berättar för Rscript
att köra R-skriptet som du har skrivit och som finns i samma mapp som batchfilen ( %~dp0
står för batchfilmappen). Slutligen vidarebefordrar %*
alla kommandoradsargument som du ger till batchfilen till R-skriptet.
Om du dubbelklickar på batchfilen körs R-skriptet. Om du drar filer till batchfilen ges motsvarande filnamn till R-skriptet som kommandoradsargument.
Använda littler för att köra R-skript
littler (uttalat lite r ) ( cran ) ger, förutom andra funktioner, två möjligheter att köra R-skript från kommandoraden med littlers r
kommando (när man arbetar med Linux eller MacOS).
Installera lite
Från R:
install.packages("littler")
Banans r
skrivs ut i terminalen, liksom
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.
För att kunna ringa r
från systemets kommandorad krävs en symlink:
ln -s /home/*USER*/R/x86_64-pc-linux-gnu-library/3.4/littler/bin/r /usr/local/bin/r
Använda apt-get (Debian, Ubuntu):
sudo apt-get install littler
Använda littler med standard .r-skript
Med r
från littler
är det möjligt att köra fristående R-skript utan några ändringar i skriptet. Exempel manus:
# 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()
Observera att ingen shebang är längst upp på skriptet. När den sparas som till exempel hist.r
, kan den direkt beräknas från systemkommandot:
r hist.r
Med hjälp av littler på shebanged manus
Det är också möjligt att skapa körbara R-skript med lite, med användning av shebang
#!/usr/bin/env r
längst upp i skriptet. Motsvarande R-skript måste göras körbart med chmod +X /path/to/script.r
och kan direkt utrullas från systemterminalen.