Diese Unterlagen, auch die zugehörigen Screencasts verändern sich in den nächsten Tagen noch bzw. werden ergänzt.
Einführung in R, R-Studio und R-Markdown
Erklärung, Demonstration und Übungen zur Arbeitsumgebung R-Console, RStudio, R-Markdown
Wegen der besonderen Situation 2021 mit Screencasts an Stelle von Life-Demonstrationen
Einige Verweise auf weitere Möglichkeiten, sich auch im Selbststudium in R und R-Studio einführen zu lassen, finden sich am Ende ab Swirl, eine gute Möglichkeit, sich in R “an der Hand nehmen zu lassen”. Danke an Birk.
Außerdem spricht der Einstiegs-Screencast [StudIP]](https://studip.uni-goettingen.de/plugins.php/mediacastplugin/media/check/557da707f35cbedf27871677d1e8e982/ddf2aa3d702d4f6841994519e5aa73dc/127?v=starthilfe.mp4) - ownCloud von Kai sicherlich auch viele an. Der Screencast war für das SS 2020, gilt aber weitgehend auch für das SS 2021.
Der Computerpool ist ab SS 2020 sogar mit einer Klimatisierung ausgestattet. Leider kann sie vorerst niemand nutzen, da man sich im Pool näher als 2m kommt.
Die Installation von R und R-Studio für diese Übung und auch für die Prüfung findet sich auf einem Windows-Terminalserver, der erreichbar ist unter dem Namen
teaching.psych.bio.uni-goettingen.de:49121
Anleitungen zum Aufbau einer RDP-Verbindung zu diesem Server (login nötig, stud. Account):
https://www.psych.uni-goettingen.de/de/it/documentation/teaching-terminalserver
login bei StudIP nötig, stud. Account
Hinweise zu Multi-Plattform-Benutzung von R und zu Göttinger Besonderheiten
Studierende der Psychologie (ug-student...) und Mitarbeiter des Institutes (gwdg...) können sich anmelden
das eigene P-Laufwerk mit den persönlichen Daten wird automatisch zur Verfügung gestellt
Falls nicht schon geschehen: Bitte richten Sie unbedingt ein: P:\R\library
Das R
muss ein großes sein, das l
bei library
klein. Erklärung folgt.
R ist case sensitive, unterscheidet also zwischen Groß- und Kleinbuchstaben in seinen internen Namen. Betriebssysteme wie Mac-OS-X und Linux machen das grundsätzlich auch, Windows bei Dateinamen und Pfaden nicht. FileName
!= Filename
!= filename
R ist ein Multi-Plattform-Programm. Daher empfehlen wir dringend und in eigenem Interesse, auch unter Windows Groß- und Kleinschreibung zu unterscheiden.
vermeiden Sie im eigenen Interesse in Pfad- und Dateinamen Sonderzeichen und Leerzeichen. Auch 2021 gibt es nach wie vor Probleme, weil immer noch nicht überall UTF-8 als Codierung von Strings eingehalten wird.
Bei allen Pfadangaben in R müssen die Teile mit /
und nicht mit dem unter Windows üblichen \
getrennt werden. Den oben erwähnten Library-Pfad auf dem Lehre-Server P:\R\library
müsste in R also als P:/R/library
angegeben werden. Kontrolle in R: .libPaths()
Auf dem Lehre-Server wird für alle Benutzer das Arbeitsverzeichnis (working directory) gesetzt auf P:
Bitte prüfen Sie das mit getwd()
in der R-Console und korrigieren Sie es ggf. mit setwd("P:/")
Die persönlichen Laufwerke haben im Göttinger Universitäts-Umfeld Namen, die mit doppeltem Backslash \\ug-uyst-ba-cifs.student.uni-goettingen.de\home\users\...
beginnen. Windows UNC-Schreibweise von Netzpfaden im Gönet funktioniert unter R nicht. Vermeiden Sie am besten auch das beliebte Speichern auf dem Windows-Desktop, wenn Sie die Dateien in R benutzen wollen. Am besten benutzen Sie durchgehend ein Unterverzeichnis von P:\
, z. B. P:\mv
oder in R P:/mv
. Das gilt für Downloads, Kursmaterialien und alles andere, was Sie unter R benutzen wollen.
Bitte verwenden Sie Firefox oder Chrome für Browser Downloads. Rechtsklick save as
macht sonst Probleme, da die Dateien teils neue Extensions bekommen.
OwnCloud, Zugriff und Verwendung für eigene Projekte, siehe unten.
Sticks und lokale Speichermedien: je nach Konfiguration der RDP-Verbindung funktionieren sie direkt bzw. per copy/paste für Dateien.
copy/paste für Text funktioniert mit den üblichen Shortcuts, selbst auf Macs mit aktuellen RDP-Programmen
P:/R/library
aus R herausKonsole als interaktive Schnittstelle zu R
Kommandozeile (Cursor)
versucht, Eingaben als R-Befehle zu interpretieren
ein paar Beispiele simpler Mathe
Textzeilen mit Kommandos, die abgearbeitet werden (R-Programm wäre viele solcher Zeilen, s. u.)
Zeile zurückholen
Copy und Paste aus history in command line
copy-paste aus anderen Quellen möglich
Ergebnisse “laufen durch”
R kennt Objekte
R hat viele vordefinierte Objekte (z. B. pi)
Wir können Objekte definieren, indem wir einem Objekt einen Namen geben und ihm einen Inhalt zuweisen
Objekte werden im Environment gespeichert
Wir benutzen Objekte, indem wir ihren Namen gebrauchen
R kennt Funktionen (z. B. sqrt(), log(), exp() )
Wir erkennen Funktionen an den Klammern (brackets)
In den Klammern übergeben wir Argumente
geschachtelte R-Ausdrücke werden von innen nach außen aufgelöst
Mini statistics sum()
sd(), var(), mean()
Objekte können ein oder mehrere Elemente enthalten
combine: c()
Daten-Objekt
Grafiken werden ebenfalls über Befehle erzeugt, wir programmieren Grafiken
Grafiken in eigenem Fenster, können aber über Befehle gespeichert werden oder per copy-paste in andere Dokumente integriert werden
Tabellen als Datenobjekte data.frame
Ergebnisobjekte
ein paar Versuche und Demos
# a first impression on R using the console and some very basic concepts
# objects, functions, data objects, descriptive stats and a first impression on graphs
version
## _
## platform x86_64-apple-darwin17.0
## arch x86_64
## os darwin17.0
## system x86_64, darwin17.0
## status
## major 4
## minor 0.5
## year 2021
## month 03
## day 31
## svn rev 80133
## language R
## version.string R version 4.0.5 (2021-03-31)
## nickname Shake and Throw
# simple computations
17 * 5
## [1] 85
(4 + 5) * 2 # precedence of multiplication and parenthesis
## [1] 18
2e+04 # exponential writing of numbers
## [1] 20000
# simple objects: containers with a name
# f. e. number pi
# objects show their content in the console, if we call them by name
pi
## [1] 3.141593
# we can use them instead of input
pi ** 2
## [1] 9.869604
# we can define our own objects using "=" or even clearer "<-" and use them
pi_2 <- pi ** 2
pi_2
## [1] 9.869604
# we can create our own objects by assigning something to a name using "=" or "<-"
ss = "Paul who made the highscore recently" # we create an object that contains a string
aa = 3948527349584259827 # the content of aa is a large number
rr <- sqrt(9) # rr stores the result of a function call
# we can use objects by calling/using the name
ss # shows the string contained
## [1] "Paul who made the highscore recently"
aa # shows the number stored
## [1] 3.948527e+18
# functions, are objects that have parameters in brackets
# a lot of them are predefined in R base or in packages, but we can define our own functions also
# parameters depend on the function in question, some might not even need any: empty brackets ()
getwd() # returns the current working directory
## [1] "/Users/pzezula/ownCloud/lehre_ss_2021/unit/block_intro"
Sys.time() # returns the current date and time
## [1] "2021-04-12 09:38:19 CEST"
# Sys.getenv() would return all system variables, to get a specific one we ask for it
Sys.getenv("PATH")
## [1] "/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/TeX/texbin:/opt/X11/bin:/Applications/RStudio.app/Contents/MacOS/postback"
# sqrt() needs at least one parameter
# sqrt() # would cause an error, try it
sqrt(9) # returns 3
## [1] 3
log(10) # take the logarithm of 10
## [1] 2.302585
exp(0) # compute the exponential value of 0 (=1)
## [1] 1
sin(1) # sinus of 1
## [1] 0.841471
# we may use nested expressions in R
# the argument can itself be function, so the inner functions result is passed to the outer function
rr <- sqrt(3 * 3 * 9)
sqrt(rr)
## [1] 3
sin(sqrt(rr))
## [1] 0.14112
exp(sin(sqrt(rr)))
## [1] 1.151563
sqrt(sqrt(81))
## [1] 3
log(exp(0))
## [1] 0
# we can store the result of our nested expressions in an object,
# as we can store anything in an object and use it by calling it's name
# we use a name of an existing object (rr) and therefore it is overwritten with the result of our nested expression
rr <- exp(sin(sqrt(rr)))
# using basic statistics
# f. e. if we have some body heights 180, 176, 180, 182, 160, 156, 165, 160, 159, 189
# sum works
sum(180, 176, 180, 182, 160, 156, 165, 160, 159, 189) # sum of our collected heights
## [1] 1707
mean(180, 176, 180, 182, 160, 156, 165, 160, 159, 189) # idea: arithmetic mean, average height, doesn't work, why?
## [1] 180
# mean accepts only one unnamed parameter
# we better store our body heights in an object and use this instead
# heights <- 180, 176, 180, 182, 160, 156, 165, 160, 159, 189 would not work, we have to convert our values to a unit (vector) by using c()
heights <- c(180, 176, 180, 182, 160, 156, 165, 160, 159, 189)
# heights is a data object
# as with any other object we can access our data by using the name of the data object instead of using the values directly
mean(heights)
## [1] 170.7
sd(heights)
## [1] 11.91684
mean(heights)
## [1] 170.7
sum(heights)
## [1] 1707
# we can create graphs using commands
plot(heights)
boxplot(heights)
# imagine we also collected weights of the same observations
weights = c(60, 54, 110, 52, 62, 41, 71, 70, 44, 60)
length(weights) # number of values included
## [1] 10
mean(weights) # average weight
## [1] 62.4
# now, we have two sources of data for the same people
# R can have multiple sources of data at a time
# so we could compare them f. e.
mean(heights) > mean(weights)
## [1] TRUE
# ... which is hopefully TRUE ;-)
# of course, R also knows data tables (vars in columns, observations in lines)
# they are called data frames in R base
# a first glance
dd <- data.frame(heights, weights)
# show our data table
dd
## heights weights
## 1 180 60
## 2 176 54
## 3 180 110
## 4 182 52
## 5 160 62
## 6 156 41
## 7 165 71
## 8 160 70
## 9 159 44
## 10 189 60
# access weights in data table "data" using the $ operator
dd$weights
## [1] 60 54 110 52 62 41 71 70 44 60
# calculate average heights
mean(dd$heights)
## [1] 170.7
# dd is also an object in R
# you can see it in the Environment in R-Studio
# you can also check its structure there by clicking on the little blue arrow in front of the name
# we can use multiple data objects in one plot
plot(heights, weights)
# the same using two columns of one data object
plot(dd$heights, dd$weights)
# we might play around with some more data and columns
ht <- c( 180, 176, 180, 182, 160, 156, 165, 160, 159, 189)
wt <- c( 60, 54, 110, 52, 62, 41, 71, 70, 44, 60)
gender <- c( "m", "m", "f", "f", "f", "f", "f", "f", "f", "m")
group <- c( 1, 1, 1, 1, 1, 2, 2, 2, 2, 2)
dd <- data.frame(ht, wt, gender, group)
Help
im R-Studio Menu, Websuchen helfen natürlich aucheine Folge von Zeilen mit R-Kommandos (Programm)
(auch) in Form einer Textdatei
die File-Extension von R-Skripten ist ‘.R’, z. B. jump-in.R
Kommentare mit #
erleichtern das Verständnis später
R-Skripte können in R-Studio direkt erstellt werden
in R-Studio in einem R-Skript-Fenster können wir auch das Skript Zeile für Zeile ausführen und jeden Zwischenzustand kontrollieren. Die Zeile, in der der Cursor steht, können wir ausführen lassen, indem wir ctrl-Enter (Win) bzw. cmd-Enter(Mac) drücken.
nahezu alles, was man im Netz zu R findet, ist R-Code, meist in Form von kurzen R-Skripten, viele Beispiele, Problemlösungen, Erklärungen etc.
R-Code bzw. Skripte lassen sich per copy/paste in die Console einfügen und werden dort dann Zeile für Zeile ausgeführt Ergebnisse oder Fehlermeldungen erscheinen dann in der Console
R-Skripte können auch direkt aufgerufen werden und laufen dann ab, ggf. sogar außerhalb einer R-Studio-Session oder R-Session. Damit eignen sie sich zur Automatisierung von Aufgaben in R
Für die MV-Übung hier empfehlen wir allerdings das Benutzen von RMD, das weiter unten genauer vorgestellt wird. Nahezu alle Möglichkeiten von R-Skripten sind in RMDs auch möglich.
Unter Mini Beispiel jump_in stellen wir ein minimales Beispiel, auch als R-Skript vor. Dies als Screencast
inline rendering ausschalten
set working directory
cheatsheets
Datenobjekte, Workspace, kein I/O für einzelne Datenobjekte, aber Einlesemöglichkeit
spezielle auf RMD abgestimmte Möglichkeiten (run chunk, run all chunks above, )
dateispezifische Markdown Options in Header bar
dateispezifische Knit Options
der sequenzielle Charakter von R bleibt unter der Haube erhalten
das ist besonders wichtig, wenn Code-Teile ausgeführt werden
Global Options bzw. Preferences (Mac-OSX)
{} Screencasts dazu mit Vorstellen
Data I/O, Einlesen von Daten, Wegschreiben von Daten
Wir konzentrieren uns hier auf die Möglichkeit, einzelne Datenobjekte über URLs zu öffnen und zu verarbeiten. Dabei verzichten wir hier darauf, den lokalen Zugriff auf Datenfiles vorzustellen. Hierzu gibt es viele Tutorials und Materialien im Web.
Daten- und Beispielserver für diese Veranstaltung
Alle Materialien und Datendateien werden auf einem speziellen Server zur Verfügung gestellt.
Der Name des Servers ist:
https://md.psych.bio.uni-goettingen.de
Auf dem Server sind auch die Beispielklausuren zu finden. Diese sind nur von innerhalb des Gönet erreichbar. Es ist also ein VPN-Tunnel (Cisco) notwendig, wenn Sie nicht im GöNet sind, z. B. im Institut oder in der SUB.
Einlesen von Daten (einzelner Datenobjekte) aus URL
R kann Daten in verschiedenen Formaten direkt aus URLs öffnen. Wir konzentrieren uns hier auf das Einlesen aus
Je nach Format und Einlesebefehl werden die eingelesenen Datensätze unterschiedlich interpretiert. Das führt vor allem bei den automatischen Konvertierungen zu teils unvorhersehbarem und damit nicht reproduzierbarem Verhalten. Das hat weitreichende Konsequenzen vor allem bei der automatischen Umwandlung von Textvariablen in den Variablentyp factor
, der in den statistischen Verfahren eine Schlüsselrolle spielt. Hier ein erläuterndes Beispiel und unser Vorschlag zur Vereinheitlichung und zu nachhaltigem Vorgehen, zumindest in dieser Veranstaltung und Umgebung (readRDS
und saveRDS
).
Es werden Einlese-Befehle des Base-System und des Paketes tidyverse
vorgestellt und verglichen. Achten Sie auf den Unterschied zwischen ‘.’ und ’_’ in den Befehlen, z. B. read.csv
vs read_csv
(base vs tidyverse’s readr command) tidyverse’s read commands
Wir empfehlen die Verwendung von readRDS
zum Einlesen und saveRDS
zum Speichern einzelner R-Datenobjekte. Damit können R-Datenobjekte direkt gelesen bzw. gespeichert werden, ohne dass eine Neuinterpretation des Inhaltes beim Einlesen geschieht. Alle Attribute eines R-Datenobjektes bleiben erhalten.
# among base system's read in commands we use tidyverse's readr commands, therefore we need to load that package. Explanations of packages follow later.
require(tidyverse)
## Loading required package: tidyverse
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
## ✓ tibble 3.1.0 ✓ dplyr 1.0.5
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
# several methods to read in data objects in R directly from an URL
# pure text file
# http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi.txt
# "ht" "wt" "gender" "group" "f.group"
# "1" 180 60 "m" 1 "lo"
# ...
# to read a text file with data columns separated by tabs directly from a known URL
dd1 <- read.delim("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi.txt")
dd2 <- read_tsv("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi.txt")
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## ht = col_double(),
## wt = col_double(),
## gender = col_character(),
## group = col_double(),
## grp_c = col_double(),
## f.group = col_character()
## )
# CSV file as known by older Excel versions, data columns are separated by commas ","
# http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi.txt
# "","ht","wt","gender","group","f.group"
# "1",180,60,"m",1,"lo"
# ...
# to read it directly from a known URL
dd1 <- read.csv("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi_csv1.csv")
dd2 <- read_csv("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi_csv1.csv")
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## ht = col_double(),
## wt = col_double(),
## gender = col_character(),
## group = col_double(),
## grp_c = col_double(),
## f.group = col_character()
## )
# CSV file as known by current Excel versions, data columns seprarated by semicolons ";"
# http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi_csv2.csv
# "";"ht";"wt";"gender";"group";"f.group"
# "1";180;60;"m";1;"lo"
# ...
# to read it directly from a known URL
dd1 <- read.csv2("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi_csv2.csv")
dd2 <- read_csv2("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi_csv2.csv")
## ℹ Using ',' as decimal and '.' as grouping mark. Use `read_delim()` for more control.
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## ht = col_double(),
## wt = col_double(),
## gender = col_character(),
## group = col_double(),
## grp_c = col_double(),
## f.group = col_character()
## )
# to read a R data file directly from a known URL, we have to pass the URL to a decompressor command "gzcon"
# and use readRDS to finally read it into our current environment
dd <- readRDS(gzcon(url("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi.rds")))
Speichern einzelner Datenobjekte
Direktes Speichern auf einem Webserver geht über Umwege mit R, ist aber kritisch. Daher wird hier nur das lokale Wegschreiben eines Datenobjekts in das aktuelle Arbeitsverzeichnis gezeigt.
# our working directory, where the files are written to
getwd()
## [1] "/Users/pzezula/ownCloud/lehre_ss_2021/unit/block_intro"
# we read a data object that we want to store locally
dd <- readRDS(gzcon(url("http://md.psych.bio.uni-goettingen.de/mv/data/div/sample_bi.rds")))
require(tidyverse)
# we write a text file with data columns separated by tabs
write.table(dd, file="sample_bi.txt", sep="\t")
# using tidyverse's readr
write_delim(dd, "sample_bi.txt", delim="\t")
write_tsv(dd, "sample_bi.txt")
# we write a CSV file data columns are separated by commas ","
write.csv(dd, file="sample_bi_csv1.csv")
write_csv(dd, "sample_bi_csv1.csv")
# we write a CSV file data columns are separated by semicolons ";"
write.csv2(dd, file="sample_bi_csv2.csv")
write_csv2(dd, "sample_bi_csv2.csv")
# we write a *.rds file, as directly known by R with all attributes
saveRDS(dd, "sample_bi.rds")
… mit Vorstellen einiger Möglichkeiten
.RData
Wichtig ist es, zu verstehen, dass R nicht nur eine Datenquelle hat (eine einzige Datentabelle), wie andere Statistikpakete. R kann alle Daten(-objekte) ansprechen, die es in seinem aktuellen Environment findet. Standardmäßig speichert R auch immer das gesamte Environment, also alle zum Zeitpunkt des Speicherns bekannten Objekte seines Environments. Normalerweise wird das in eine Datei namens .Rdata
geschrieben, in das aktuelle Working-Directory. Beim Verlassen von R wird das auch standardmäßig angeboten. Zu einem beliebigen Zeitpunkt kann man das auch direkt veranlassen:
R-Projekte haben ein projektbezogenes Environment (siehe dort).
# suppose, we have two data objects called heights and dd in our current environment
# and our working directory is
getwd()
## [1] "/Users/pzezula/ownCloud/lehre_ss_2021/unit/block_intro"
# so we could save these two objects in a file called "1.RData" in the current working directory
save(heights, dd, file="1.RData")
# if we want to load these two data objects in our current environment, we could use:
load(file="1.RData")
data()
zeigt Ihnen die aktuell mit den Packages vorhanden Daten, das sind Beispieldaten, die R schon mitbringt spielen Sie mit diesen DatenR-Packages oder Libraries
Packages sind Erweiterungen von R - es gibt tausende
Packages aktivieren (R-Studio, R-Syntax) Packages haben eigenen “Namespace”. Package-Befehle können sich maskieren Package Suchpfad .libPaths()
Packages direkt ansprechen mit ::
Package Befehl über <package-name>::<package-command>
psych::describe
das Package muss nicht mal geladen sein, require(), library() sind nicht nötig vor BenutzungPackages installieren - vorinstallierte Pakete, Installation in persönlichem Bereich (P: Laufwerk), install.packages(“sudoku”, lib.loc(“P:/R/library”))
Package Befehle und Dokumentation
Package “psych” entladen detach("package:psych", unload = TRUE)
Datensätze in Packages data(package='psychTools')
Datensätze können auch über den ::
Operator angesprochen werden, ohne das Package laden zu müssen dd <- psychTools::bfi
Packages finden, z. B. bei cran
Help for packages
browseVignettes('YourPackage')
help(package = 'YourPackage', help_type = 'html')
Funktionen oder allgemeiner Objekte mit demselben Namen in verschiedenen Packages können sich gegenseitig “maskieren”. Bei Maskierung wird das Objekt mit dem geforderten Namen des Package gefunden, das als letztes geladen wurde.
Problem: Viele geladene Packages, Standardsammlung von Packages am Anfang eines Scriptes
# we load packages
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
library(dplyr)
# package hierarchy
search()
## [1] ".GlobalEnv" "package:MASS" "package:forcats"
## [4] "package:stringr" "package:dplyr" "package:purrr"
## [7] "package:readr" "package:tidyr" "package:tibble"
## [10] "package:ggplot2" "package:tidyverse" "package:stats"
## [13] "package:graphics" "package:grDevices" "package:utils"
## [16] "package:datasets" "package:methods" "Autoloads"
## [19] "package:base"
# conflicts
conflicts(detail=TRUE)
## $.GlobalEnv
## [1] "weights"
##
## $`package:MASS`
## [1] "select" "npk"
##
## $`package:forcats`
## [1] "%>%" "%>%" "%>%" "%>%" "%>%"
##
## $`package:stringr`
## [1] "%>%" "%>%" "%>%" "%>%" "%>%"
##
## $`package:dplyr`
## [1] "%>%" "%>%" "select" "%>%"
## [5] "%>%" "as_tibble" "contains" "ends_with"
## [9] "everything" "last_col" "matches" "num_range"
## [13] "one_of" "starts_with" "tibble" "tribble"
## [17] "%>%" "add_row" "as_data_frame" "as_tibble"
## [21] "data_frame" "data_frame_" "frame_data" "glimpse"
## [25] "lst" "lst_" "tbl_sum" "tibble"
## [29] "tribble" "trunc_mat" "type_sum" "enexpr"
## [33] "enexprs" "enquo" "enquos" "ensym"
## [37] "ensyms" "expr" "quo" "quo_name"
## [41] "quos" "sym" "syms" "vars"
## [45] "filter" "lag" "intersect" "setdiff"
## [49] "setequal" "union"
##
## $`package:purrr`
## [1] "%>%" "%>%" "%>%" "%>%" "%>%"
##
## $`package:tidyr`
## [1] "%>%" "%>%" "%>%" "%>%" "as_tibble"
## [6] "contains" "ends_with" "everything" "last_col" "matches"
## [11] "num_range" "one_of" "starts_with" "tibble" "tribble"
## [16] "%>%" "as_tibble" "tibble" "tribble"
##
## $`package:tibble`
## [1] "%>%" "%>%" "%>%" "%>%"
## [5] "as_tibble" "tibble" "tribble" "%>%"
## [9] "add_row" "as_data_frame" "as_tibble" "data_frame"
## [13] "data_frame_" "frame_data" "glimpse" "lst"
## [17] "lst_" "tbl_sum" "tibble" "tribble"
## [21] "trunc_mat" "type_sum"
##
## $`package:ggplot2`
## [1] "enexpr" "enexprs" "enquo" "enquos" "ensym" "ensyms"
## [7] "expr" "quo" "quo_name" "quos" "sym" "syms"
## [13] "vars" "Position"
##
## $`package:stats`
## [1] "filter" "lag" "weights"
##
## $`package:graphics`
## [1] "plot"
##
## $`package:datasets`
## [1] "npk"
##
## $`package:methods`
## [1] "body<-" "kronecker"
##
## $`package:base`
## [1] "body<-" "intersect" "kronecker" "plot" "Position" "setdiff"
## [7] "setequal" "union"
# with a suspicious command, here summarise()
getAnywhere(x = "select")
## 3 differing objects matching 'select' were found
## in the following places
## package:MASS
## package:dplyr
## namespace:tidyselect
## namespace:dplyr
## namespace:MASS
## Use [] to view one of them
# alternatively for select
x = "select"
names(which(sapply(search(), FUN = function(env) exists(x, env, inherits = FALSE, mode = "function"))))
## [1] "package:MASS" "package:dplyr"
# help by unloading the unwanted package or by explicitely calling a specific command
dplyr::select
## function (.data, ...)
## {
## UseMethod("select")
## }
## <bytecode: 0x7fdf9b6962c0>
## <environment: namespace:dplyr>
Die Packages werden in einem Verzeichnis auf dem P: Laufwerk installiert und beim Laden wird mit angegeben, von wo aus das Package gelesen werden soll.
2019 neu: P:/R/library
wurde zum default path zentral hinzugefügt .libPaths()
Damit kann ein dort installiertes Paket ohne Angabe eines Load-Path gestartet werden
Beispiel: Hier wird P:\R\libraries
als Verzeichnis für Libraries benutzt, Sie haben hier Schreibrechte.
[die Befehle unten dienen nur der Illustration, sind auskommentiert und werden nicht direkt ausgeführt]
# get and install a package called sudoku in a specified directory
install.packages("sudoku", lib="P:/R/library")
# load package sudoku explicitly by supplying the location of the package
library(sudoku, lib.loc='P:/R/library')
# ... the same using require()
require(sudoku, lib.loc='P:/R/library')
laden/aktivieren Sie verschiedene Packages (in RStudio und als Command)
verschaffen Sie sich einen Überblick über die in dem Package enthaltenen Befehle
nutzen Sie testweise Befehle aus den geladenen Packages
lubridate
installieren und ausprobieren, Datums- und Zeitberechnungen cf cf führen sie ein paar Zeit- und Datumsberechnungen durch
installieren Sie das Package sudoku
generieren Sie ein Sudoku
finden Sie die Lösung des neu generierten Sudoku
installieren Sie ein anderes, Ihnen interessant vorkommendes Paket finden Sie heraus, welche Datensätze es zur Verfügung stellt. laden Sie einen der Datensätze und machen Sie sich ein Bild, um welche Art von Daten es sich handelt. (psychTools, MPsychoR, )
prüfen Sie Namenskonflikte von Befehlen, also das sog. Masking finden Sie heraus, welche Version eines maskierten Befehls gerade aktiv ist (bei einem Aufruf ohne Package-Präfix via :: )
entladen Sie eines Ihrer geladenen Pakete
Dies ist für diese Veranstaltung eher ein Nebenaspekt.
Die Universität Göttingen stellt allen Studierenden 10 GB ownCloud-Speicher zur Verfügung. Hier können Sie neben vielen anderen Möglichkeiten auch Datendateien speichern, freigeben und in R direkt benutzen.
Seiten der GWDG zu ownCloud analog.
Vorgehen:
Beispiellink (eine freigegebene ownCloud Datendatei im CSV-Format vom studentischen Benutzer ‘psych.stud’): https://owncloud.gwdg.de/index.php/s/MwST1BwNLxtDon3
Einlesen in R-Skript:
# the ownCloud link is expanded with '/download'
dd <- read.delim('https://owncloud.gwdg.de/index.php/s/MwST1BwNLxtDon3/download')
Ein R-Skript ist in sich oft wenig verständlich. Kommentare helfen - etwas. RMD ist eine elegante Lösung.
Ohne Rmd würden die Ergebnisse und Abbildungen von R-Skripten gesammelt und mit einem weiteren Werkzeug (Textverarbeitung) zu einem Bericht zusammengestellt werden müssen. Dies ist fehlerträchtig und vor allem schwer reproduzierbar (Open Science verlangt z. B. Reproducability)
Idee: Dokumentation und ausführbare R-Chunks in einer einzigen Datei - automatische Berichterstellung inklusive Berechnungen “on the fly”
Idee: Markdown
das RMD-Format ist das Standard-Format in dieser Lehrveranstaltung
fast alle Materialien hier sind gerenderte RMD-Dateien und haben am Anfang einen Link auf ihren eigenen Quelltext, also auf eine Datei *.Rmd, aus der das jeweils aktuelle Dokument generiert worden ist.
Behandelt in eigener Unit
In der Unit Transformation wird auf die beiden im Weiteren dargestellten zwei Transformationsmöglichkeiten verzweigt. Darüber hinaus werden einige weitere Themen der Datentransformation angerissen und verlinkt.
In eigener Unit Transformation Base
… mit Vorstellen einiger Möglichkeiten
dplyr
gibt?dplyr
In eigener Unit dplyr
Datenfile in verschiedenen Formaten
R-Script - jump_in.R
Rmd-Datei - Source Code: jump_in.Rmd - gerendert als HTML
Ein paar Übungs-Datensätze von Matthias Lippold
Ein Beispiel-Datensatz zum Berechnen des BMI v_bmi.txt
Ein studentischer Beispiel-Datensatz stud_utf8.txt
Ein Datensatz mit Big-Five Daten (aus dem Tutorial von Christian Treffenstädt) im CSV-Format: Big5_GEMI_R.csv
Swirl is a platform for learning (and teaching) statistics and R simultaneously and interactively.
Viele Kurse können über die Swirl Website heruntergeladen werden.
Birk Oelhoff hat eine eigene Einführungseinheit in Swirl gebaut. Sie ist zu finden unter: https://pzezula.pages.gwdg.de/swirl/sheet_swirl.html
Neben den offiziellen Dokumenten und Websites, von denen es eine Vielzahl gibt, existieren ein paar Tutorials von Kollegen im Haus, die sehr empfehlenswert sind. Hier eine kleine Auswahl:
Die offizielle Website von R-Studio bietet, neben zahlreichen anderen Informationen, auch eine Dokumentation zu R-Markdown, auf der die spezielle Markdown-Variante von R-Studio beschrieben wird.
Vieles ist auch im Help-System von R-Studio hinterlegt.
Youtube: Getting Started with R and R Studio (14:37) Ein kurzes Video, das durch die Installation und die allerersten Schritte führt.
Codecademy: Introduction to R Ein kostenloser, interaktiver Online-Kurs zur Einführung in R.
Die Cheat-Sheets von R-Studio (R-Studio | Help | Cheatsheets)
Die Befehle im R Base Packagelibrary(help = "base")
Google search ‘rstudio command list’
Version: 12 April, 2021 09:38