Dariusz Brzeziński
Część I
Slajdy oparte o materiały stworzone przez Rogera Penga z Johns Hopkins Bloomberg School of Public Health.
R posiada pięć typów podstawowych:
Podstawowym typem złożonym jest vector, który jest strukturą przechowującą elementy jednego typu
L
(integer)Inf
(nieskończoność) i NaN
(not a number)Obiekty w R mogą mieć atrybuty, np.:
Atrybuty można odczytać/zapisać za pomocą funkcji attributes()
.
R jest językiem interaktywnym, gdzie w konsoli można bezpośrednio wpisywać wyrażenia. Symbol <-
oznacza operator przypisania (symbol =
też w większości kontekstów zadziala).
> x <- 1
> print(x)
[1] 1
> x
[1] 1
> msg <- "hello"
Znak # rozpoczyna komentarz jednowierszowy.
Po wpisaniu wyrażenia do konsoli, R je przetwarza i zwraca jego wynik. Jeśli wynik nie jest przypisany do zmiennej, z reguły zostanie wypisany na konsolę.
> x <- 5 ## nic się nie dzieje
> x ## niejawne wypisanie na konsolę
[1] 5
> print(x) ## jawne wypisanie na konsolę
[1] 5
[1]
oznacza, że x
jest wektorem, którego pierwszym elementem jest 5
.
Funkcja c()
pozwala łączyć obiekty w wektory.
> x <- c(0.5, 0.6) ## numeric
> x <- c(TRUE, FALSE) ## logical
> x <- c(T, F) ## logical
> x <- c("a", "b", "c") ## character
> x <- 9:29 ## integer
> x <- c(1+0i, 2+4i) ## complex
Można też korzystać z konstruktora vector()
.
> vector("numeric", length = 10)
[1] 0 0 0 0 0 0 0 0 0 0
Kończy się niejawnym rzutowaniem…
> x <- c(1.7, "a") ## character
> x <- c(TRUE, 2) ## numeric
> x <- c("a", TRUE) ## character
… lub wymaga jawnego rzutowania
> y <- 0:6
> class(y)
[1] "integer"
> as.numeric(y)
[1] 0 1 2 3 4 5 6
> as.logical(y)
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE
> as.character(y)
[1] "0" "1" "2" "3" "4" "5" "6"
Jeśli nie ma sensu prowadzi do NA
, czyli brakujących wartości.
> x <- c("a", "b", "c")
> as.numeric(x)
[1] NA NA NA
Warning message:
NAs introduced by coercion
> as.logical(x)
[1] NA NA NA
> as.complex(x)
[1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i
Obiekty typu matrix to wektory z atrybutem dimension. Atrybut dimension też jest wektorem o długości 2 (nrow, ncol).
> m <- matrix(nrow = 2, ncol = 3)
> m
[,1] [,2] [,3]
[1,] NA NA NA
[2,] NA NA NA
> dim(m)
[1] 2 3
> attributes(m)
$dim
[1] 2 3
Macierze można również tworzyć za pomocą funkcji cbind()
i rbind()
.
> x <- 1:3
> y <- 10:12
> cbind(x, y)
x y
[1,] 1 10
[2,] 2 11
[3,] 3 12
> rbind(x, y)
[,1] [,2] [,3]
x 1 2 3
y 10 11 12
Obiekty typu list to wektory, które mogą przechowywać elementy różnych typów.
> list(1, "a", TRUE, 1 + 4i)
[[1]]
[1] 1
[[2]]
[1] "a"
[[3]]
[1] TRUE
[[4]]
[1] 1+4i
Typ data frame pozwala przechowywać dane tabelaryczne różnych typów.
> x <- data.frame(foo = 1:4, bar = c(T, T, F, F))
> x
foo bar
1 1 TRUE
2 2 TRUE
3 3 FALSE
4 4 FALSE
> nrow(x)
[1] 4
> ncol(x)
[1] 2
Typy wyliczeniowe kryją się w R pod typem factor. Kolejne wartości to poziomy (levels), gdzie każdy poziom to tak naprawdę liczba całkowita i odpowiadający jej łańcuch znaków. Typy wyliczeniowe mogą być nieuporządkowane (zmienne nominalne) lub uporządkowane (zmienne porządkowe).
> x <- factor(c("yes", "yes", "no", "yes", "no"))
> x
[1] yes yes no yes no
Levels: no yes
> table(x)
x
no yes
2 3
> unclass(x)
[1] 2 2 1 2 1
attr(,"levels")
[1] "no" "yes"
Brakujące wartości w R są oznaczane NA
(not available). Wartość NaN
też jest wartością brakującą.
is.na()
sprawdza czy obiekt jest NA
is.nan()
sprawdza czy obiekt jest NaN
NA
mają swój atrybut class, a zatem są liczbowe NA
, tekstowe NA
, itd.NaN
jest wartością NA
, ale nie vice versa> x <- c(1, 2, NA, 10, 3)
> is.na(x)
[1] FALSE FALSE TRUE FALSE FALSE
> is.nan(x)
[1] FALSE FALSE FALSE FALSE FALSE
> x <- c(1, 2, NaN, NA, 4)
> is.na(x)
[1] FALSE FALSE TRUE TRUE FALSE
> is.nan(x)
[1] FALSE FALSE TRUE FALSE FALSE
Instalacja krok po kroku:
install.packages("devtools")
devtools::install_github("dabrze/swirl")
Aby zacząć kurs wystarczy:
library(swirl.pl) ## załadować pakiet
swirl() ## uruchomić swirla
Jeśli znajdziecie jakieś błędy niejasności czy literówki, prosiłbym o zgłoszenie tego.
W razie nieobecności na zajęciach należy nadrobić zaległe kursy swirla, gdyż materiał tam zawarty będzie potrzebny do pomyślnego zaliczenia kartkówek.
Na następne zajęcia obowiązuje pierwsze osiem lekcji z moduły Programowanie w R.