5.1 Funktioner i R
Standardinstallationen av R inkluderar många funktioner för diverse uppgifter, från enkla matematiska beräkningar till komplicerade statistiska modeller och grafer. Vissa funktioner är enkla att använda medan andra funktioner kräver mer ansträngning. Alla funktioner har dock samma anatomi, som visas här nedan för funktionen mean()
:
mean(x)
Alla funktioner börjar med namnet på funktionen. I ovanstående exempel heter funktionen mean. Efter namnet följer en parentes som innehåller alla funktionens argument. Ett argument är information som funktionen vill ha. Funktionen mean()
har ett obligatoriskt argument (det måste anges för att kunna använda funktionen), nämligen x
. Argument specificeras med ett likhetstecken (=
). I detta fall är argumentet x den vektorn som vi vill tillämpa funktionen mean()
på. Låt oss skapa en vektor som vi kallar my_numbers
och tillämpa funktionen mean()
på den:
my_numbers <- c(1, 2, 3, 4)
mean(x=my_numbers)
[1] 2.5
Funktionen mean()
har även argumentet na.rm
, som specificerar om beräkningen skall ignorera saknade värden. Saknade värden anges som NA
(Not Available) i R. Funktionen mean()
tolererar inte att värden saknas, såvida det inte specificeras explicit med argumentet na.rm
som betyder “NA remove”. Vi kan testa detta genom att introducera ett saknat värde i vår vektor och använda funktionen på samma sätt igen:
my_numbers <- c(1, 2, 3, NA)
mean(x=my_numbers)
[1] NA
Resultatet blir NA, vilket innebär att resultatet också saknas! Detta beror på att argumentet na.rm
är ställt till FALSE som standard. Då elimineras inte NA, vilket leder till att medelvärdet inte kan beräknas. Nu gör vi ett försök till där vi ber R ta bort NA:
my_numbers <- c(1, 2, 3, NA)
mean(x=my_numbers, na.rm=TRUE)
[1] 2
Nu fungerar det! Argumentet na.rm
har en default-värden, dvs en grundinställning som används om inget annat specificeras av användaren. För na.rm
är grundinställningen FALSE, vilket förklarar varför vi inte kunde göra beräkningen på my_numbers
som hade NA utan att specificera na.rm=TRUE
.
Notera följande:
- En funktion kan ha många argument och de separeras med ett kommatecken när funktionen används.
- Varje argument i funktionen har ett namn.
- Vi använder likhetstecken för att specificera vad argumentet skall vara. Exempelvis
na.rm=TRUE
.
Vi kan faktiskt ange värden för ett argument utan att skriva argumentens namn. Här beräknar vi medelvärdet utan att ange att my_numbers
är argumentet x
.
my_numbers <- c(1, 2, 3, 4)
mean(my_numbers)
[1] 2.5
Om du inte anger argumentens namn måste du ange dem i exakt den ordningen som funktionen har. För att ta reda på ordningen kan du använda hjälpdokumentationen. Om du hoppar över för att skriva ut namnen på argumenten, kommer R att matcha dina värden till argumenten i funktionen efter ordning.
?mean
mean(x, trim = 0, na.rm = FALSE, ...)
I dokumentationen framgår att första argumentet är x, andra argumentet är trim, tredje argumentet är na.rm. Det framgår också att x saknar ett default-värde, vilket däremot finns för trim (trim=0), och na.rm (na.rm=FALSE). Dessa defaultinställningar kommer användas om användaren inte specificerar något annat.
Default för argument
Argument med default-värden är inte obligatoriska att specificera när en funktion används. Dessa argument kommer få sina default-värden om användaren inte anger något annat.
Du kan också använda funktionen args() för att se vilka argument en funktion har. Här kontrollerar vi argumenten i funktionen rnorm()
:
args(rnorm)
function (n, mean = 0, sd = 1)
Den kompletta dokumentationen för mean ser ut som följer:
Allra först till vänster i dokumentationen ses följande: mean {base}
mean är namnet på funktionen och base är paketet som innehåller funktionen.
Därefter kommer rubriken Arithmetic Mean, följt av Description. Under Description finns en beskrivning av funktionen. Under rubriken Usage får du veta vilka argument funktionen har och vilka deras default-värden är. Under rubriken Arguments får du förklaringar på vad som förväntas av argumenten. Under rubriken Value framgår vad funktionen förväntas göra. Allra längst ner får du se exempel på användning av funktionen.
5.2 Funktioner i funktioner
R ger dig möjlighet att bädda in funktioner i funktioner, vilket är mycket användbart. Se följande exempel, där vi använder tre olika funktioner (c()
, mean()
, round()
) i tre steg:
# c() skapar en vektor
my_values = c(10, 30.5, 99.43, 98.3)
# mean() räknar medelvärdet i vektorn
my_mean <- mean(my_values)
# round() avrundar till närmsta heltal
my_result <- round(my_mean)
# Se resultat
my_result
[1] 60
Du kan bädda in dessa funktioner i varndra, som följer:
my_result <- round(mean(c(10, 30.5, 99.43, 98.3)))
my_result
[1] 60
När du bäddar in en funktion i en annan funktion, kommer R börja från den innersta funktionen och gå stegvis till den yttersta. I detta exemplet innebär det att c()
körs först och round()
körs sist.
5.2.1 Tips
Använd argumentens namn när du använder dem. Det underlättar både för dig själv och andra att läsa din kod och det kan undvika oväntade misstag.
5.3 Vanliga funktioner i base R
Standardinstallationen av R kommer med många användbara funktioner. Några av dessa funktioner listas nedan. Kom ihåg att många av dessa funktioner mer eller mindre har övergivits till förmån för nyare och bättre funktioner.
5.3.1 Allmänna funktioner i base R
builtins() # List all built-in functions
options() # Set options to control how R computes & displays results
?NA # Help page on handling of missing data values
abs(x) # The absolute value of "x"
append() # Add elements to a vector
c(x) # A generic function which combines its arguments
cat(x) # Prints the arguments
cbind() # Combine vectors by row/column (cf. "paste" in Unix)
diff(x) # Returns suitably lagged and iterated differences
gl() # Generate factors with the pattern of their levels
grep() # Pattern matching
identical() # Test if 2 objects are *exactly* equal
jitter() # Add a small amount of noise to a numeric vector
julian() # Return Julian date
length(x) # Return no. of elements in vector x
ls() # List objects in current environment
mat.or.vec() # Create a matrix or vector
paste(x) # Concatenate vectors after converting to character
range(x) # Returns the minimum and maximum of x
rep(1,5) # Repeat the number 1 five times
rev(x) # List the elements of "x" in reverse order
seq(1,10,0.4) # Generate a sequence (1 -> 10, spaced by 0.4)
sequence() # Create a vector of sequences
sign(x) # Returns the signs of the elements of x
sort(x) # Sort the vector x
order(x) # list sorted element numbers of x
tolower(),toupper() # Convert string to lower/upper case letters
unique(x) # Remove duplicate entries from vector
system("cmd") # Execute "cmd" in operating system (outside of R)
vector() # Produces a vector of given length and mode
formatC(x) # Format x using 'C' style formatting specifications
floor(x), ceiling(x), round(x), signif(x), trunc(x) # rounding functions
Sys.getenv(x) # Get the value of the environment variable "x"
Sys.putenv(x) # Set the value of the environment variable "x"
Sys.time() # Return system time
Sys.Date() # Return system date
getwd() # Return working directory
setwd() # Set working directory
?files # Help on low-level interface to file system
list.files() # List files in a give directory
file.info() # Get information about files
# Built-in constants:
pi,letters,LETTERS # Pi, lower & uppercase letters, e.g. letters[7] = "g"
month.abb,month.name # Abbreviated & full names for months
5.3.2 Matematiska operationer
log(x),logb(),log10(),log2(),exp(),expm1(),log1p(),sqrt() # Fairly obvious
cos(),sin(),tan(),acos(),asin(),atan(),atan2() # Usual stuff
cosh(),sinh(),tanh(),acosh(),asinh(),atanh() # Hyperbolic functions
union(),intersect(),setdiff(),setequal() # Set operations
+,-,*,/,^,%%,%/% # Arithmetic operators
<,>,<=,>=,==,!= # Comparison operators
eigen() # Computes eigenvalues and eigenvectors
deriv() # Symbolic and algorithmic derivatives of simple expressions
integrate() # Adaptive quadrature over a finite or infinite interval.
sqrt(),sum()
?Control # Help on control flow statements (e.g. if, for, while)
?Extract # Help on operators acting to extract or replace subsets of vectors
?Logic # Help on logical operators
?Mod # Help on functions which support complex arithmetic in R
?Paren # Help on parentheses
?regex # Help on regular expressions used in R
?Syntax # Help on R syntax and giving the precedence of operators
?Special # Help on special functions related to beta and gamma functions
5.3.3 Grafik
help(package=graphics) # List all graphics functions</em>
plot() # Generic function for plotting of R objects</em>
par() # Set or query graphical parameters</em>
curve(5*x^3,add=T) # Plot an equation as a curve</em>
points(x,y) # Add another set of points to an existing graph</em>
arrows() # Draw arrows [see errorbar script]</em>
abline() # Adds a straight line to an existing graph</em>
lines() # Join specified points with line segments</em>
segments() # Draw line segments between pairs of points</em>
hist(x) # Plot a histogram of x</em>
pairs() # Plot matrix of scatter plots</em>
matplot() # Plot columns of matrices</em>
?device # Help page on available graphical devices</em>
postscript() # Plot to postscript file</em>
pdf() # Plot to pdf file</em>
png() # Plot to PNG file</em>
jpeg() # Plot to JPEG file</em>
X11() # Plot to X window</em>
persp() # Draws perspective plot</em>
contour() # Contour plot</em>
image() # Plot an image</em>
5.3.4 Regressionsmodeller
lm # Fit liner model</em>
glm # Fit generalised linear model</em>
nls # non-linear (weighted) least-squares fitting</em>
lqs # "library(MASS)" resistant regression</em>
optim # general-purpose optimisation</em>
optimize # 1-dimensional optimisation</em>
constrOptim # Constrained optimisation</em>
nlm # Non-linear minimisation</em>
nlminb # More robust (non-)constrained non-linear minimisation</em>
5.3.5 Statistiska beräkningar
help(package=stats) # List all stats functions
?Chisquare # Help on chi-squared distribution functions
?Poisson # Help on Poisson distribution functions
help(package=survival) # Survival analysis
cor.test() # Perform correlation test
cumsum(); cumprod(); cummin(); cummax() # Cumuluative functions for vectors
density(x) # Compute kernel density estimates
ks.test() # Performs one or two sample Kolmogorov-Smirnov tests
loess(), lowess() # Scatter plot smoothing
mad() # Calculate median absolute deviation
mean(x), weighted.mean(x), median(x), min(x), max(x), quantile(x)
rnorm(), runif() # Generate random data with Gaussian/uniform distribution
splinefun() # Perform spline interpolation
smooth.spline() # Fits a cubic smoothing spline
sd() # Calculate standard deviation
summary(x) # Returns a summary of x: mean, min, max etc.
t.test() # Student's t-test
var() # Calculate variance
sample() # Random samples & permutations
ecdf() # Empirical Cumulative Distribution Function
qqplot() # quantile-quantile plot