GNU R: Programmierbeispiele
Diese Seite sammelt die Programmierbeispiele für das Kapitel Programmieren mit R.
Warnung! | |
Grundsätzlich sollten in R Skripte nicht ungeprüft verwendet werden, da R-Skripte u.U. zum Starten von Angriffen gegen den eigenen oder fremde Rechner verwendet werden können. Dies gilt für dieses Buch im Besonderen, da auf Wikibooks alle Artikel und somit auch die Skripte frei editierbar sind. |
Beispiel 1: Abschlussnote
[Bearbeiten]Eine (gedachte) Abschlussnote ergibt sich aus 3 Teilnoten. Hierbei fliessen die ersten 2 Noten zu 30% - und die dritte Note zu 40% in die Abschlussnote ein. Wir programmieren uns also eine nette kleine Funktion, die uns die Abschlussnote aus den Teilnoten errechnet.
Abschlussnote <- function(x,y,z){ x.note <- (x/100)*30 y.note <- (y/100)*30 z.note <- (z/100)*40 abschluss <- x.note + y.note + z.note cat ("Abschlussnote:", abschluss, "\n") }
Wir können die Funktion nun aufrufen per: Abschlussnote(x, y, z)
, wobei x, y, z durch die jeweiligen Teilnoten ersetzt werden, z.B. so:
Abschlussnote(1.1, 1.7, 1.5)
Wir erhalten:
Abschlussnote: 1.44
Beispiel 2: Cut-Off-Points
[Bearbeiten]Bestimmung des Cut-Off-Points eines Assessmentinstruments anhand von Sensitivität und Spezifität.
Übergeben werden muss der Funktion:
- ein Vektor x, welcher die einzelnen Summenwerte (des Assessmentinstruments) enthält
- ein Vektor y, welcher für den entsprechenden Summenwert angibt, ob ein Risiko vorliegt (bzw. Ereignis eintraf) oder nicht (z.B. "0 und 1" oder "j und n").
- der Parameter
risk
, welcher angibt, wodurch die positive Gruppe im Vektor y repräsentiert wird (s.o., z.B. "0 oder 1" bzw. "j oder n") - der Parameter
dir
, welcher anzeigt- ob ein höherer Summenwert (x) die Chance zur positiven Gruppenzugehörigkeit erhöht (
dir="GREATER"
) - ob ein niedrigerer Summenwert (x) die Chance zur positiven Gruppenzugehörigkeit erhöht (
dir="LESS"
)
- ob ein höherer Summenwert (x) die Chance zur positiven Gruppenzugehörigkeit erhöht (
- der Parameter
plot
, welcher perTRUE / FALSE
angibt, ob eine Graphik ausgegeben werden soll, oder nicht.
sens.spec <- function(x,y, risk=1, dir="LESS", plot=F) { frame <- data.frame(x,y) var.min <- min(na.omit(x)) # welches ist der niedrigste Wert? var.max <- max(na.omit(x)) # welches ist der höchste Wert? dummy <- var.min cat("\r") cat("Minimum of value: ", var.min, "\r") cat("Maximum of value: ", var.max, "\r", "\r") cat("Risk is coded with: ", risk, "\r") if (tolower(dir) %in% c("greater", "g")) { cat("greater value means higher risk", "\r", "\r") } if (tolower(dir) %in% c("less","l")) { cat("lesser value means higher risk", "\r", "\r") } sesp.table <- cbind(999, 999, 999, 999, 999, 999, 999) # dient der Indizierung, wird später gelöscht (s.u.) while(dummy <= var.max) { ### true/false positive/negative if (tolower(dir) %in% c("less","l")) { tp <- length(frame$x[frame$x<=dummy & frame$y==risk]) # true positive fp <- length(frame$x[frame$x<=dummy & frame$y!=risk]) # false positive tn <- length(frame$x[frame$x>dummy & frame$y!=risk]) # true negative fn <- length(frame$x[frame$x>dummy & frame$y==risk]) # false negative } if (tolower(dir) %in% c("greater", "g")) { tp <- length(frame$x[frame$x>=dummy & frame$y==risk]) # true positive fp <- length(frame$x[frame$x>=dummy & frame$y!=risk]) # false positive tn <- length(frame$x[frame$x<dummy & frame$y!=risk]) # true negative fn <- length(frame$x[frame$x<dummy & frame$y==risk]) # false negative } sensi <- round((tp / (tp+fn)),digits=3) # Sensitivität speci <- round((tn / (tn+fp)),digits=3) # Spezifität sesp.table <- rbind(sesp.table, c(dummy, sensi, speci, tp,fp,tn,fn)) dummy <- (dummy+1) } colnames(sesp.table) <- c("Value", "Sensitivy", "Specificy", "tp", "fp", "tn", "fn") sesp.table <- sesp.table[-1,] # hier werden die "999" gelöscht if (plot==T) { plot.table <- cbind(sesp.table[,2], sesp.table[,3]) plot(plot.table) } if (plot==F) { print(sesp.table) cat("\r") cat("Cut-Off-Points include positive cases", "\r") cat("\r") } } sens.spec(x, y) # Aufruf der Funktion
Beispiel 3: Entfernen von Umlauten
[Bearbeiten]Diese Funktion entfernt störende Umlaute
noumlaute <- function(variable) { ## ---------------------------------------------------------------------- ## Funktion entfernt stoerende Umlaute, unten stehende Liste ggf. erweitern ## ---------------------------------------------------------------------- variable <- gsub("ä","ae",variable) variable <- gsub("ü","ue",variable) variable <- gsub("ö","oe",variable) variable <- gsub("Ü","Ue",variable) variable <- gsub("Ä","Ae",variable) variable <- gsub("Ö","Oe",variable) variable <- gsub("ß","ss",variable) return(variable) }
Beispiel 4: Zeit Sampler
[Bearbeiten]Diese Funktion erzeugt eine randomisierte Liste von je einem aller Wochentagen im Monat September.
randay<-function(name1, name2)#name1 und name2 sind nur labels fuer den Output { start.date <- strptime("2008/09/01","%Y/%m/%d") # erzeugt das Startdaum, welches dem ersten Montag im Montag entspricht end.date <- strptime("2008/09/30","%Y/%m/%d") # erzeugt das Enddatum, welches hier immer gleich ist MON <- seq(start.date, end.date, by="7 days") # erzeugt die Sequenz "vom Startdatum bis zum Enddatum, alle 7 Tage" start.date <- strptime("2008/09/02","%Y/%m/%d") # und legt das Ergebnis in einem Object ab. end.date <- strptime("2008/09/30","%Y/%m/%d") TUE <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/03","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") WED <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/04","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") THU <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/05","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") FRI <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/06","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") SAT <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/07","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") SUN <- seq(start.date, end.date, by="7 days") a <- c(sample(MON,1),sample(TUE,1),sample(WED,1),sample(THU,1),sample(FRI,1),sample(SAT,1),sample(SUN,1)) # Sampling a <- sort(a) cat("Name 1:", name1, "Name 2:", name2, "\n", format(a, "%a %m/%d/%y"), "\n")}
siehe auch
[Bearbeiten]
Inhaltsverzeichnis[Bearbeiten]
|