”
litu i iifiui wprowadzenie do R
vjy
9
Konwertując obiekty typu wyliczeniowego na typ liczbowy należy być ostrożnym, aby nie być zaskoczonym wynikiem takiej konwersji.
W przykładzie poniżej widzimy, co złego może się stać przy nieostrożnym konwertowaniu liczb.
■ (wciktor * faetor(c(-2,2)))
(U -2 2
I.nvola: -2 2 :;J'.
> 0 nie takiego wynika się spodziewaliśmy
> as.numorlc (wektor)
[1] 1 2 v
Konwersja typu f actor na numeric polega na tym, że kolejnym poziomom przypisywano są kolejne liczby naturalne. Stąd w powyższym przykładzie wynik 1 2. Bardziej oczekiwany wynik uzyskamy konwertując „po drodze" wektor na typ znakowy.
> as. character(wektor)
[1] "-2“ ,,2" "
> 0 tak miato. byt
> as.numeric(as.character(wektor))
[1] -2 2
Jeżeli nie jesteśmy pewni jakiego typu jest zmieima, to możemy jej typ sprawdzić funkcją classO lub modeO. Możemy też wykorzystać funkcje z tabeli 1.5.
Proszę zwrócić uwagę, że dwie przedstawione w tej tabeli funkcje: is.naO i is. nem O testują wartości, a nie typ, tak jak pozostałe funkcje z tej tabeli.
> wektor » 1:6
> 0 klasa zmiennej wektor zwraca klasę elementów tego wektora
> class(wektor)
(1) "integer"
> 0 tryb przechowywania elementów wektora to tryb liczbowy
> modę(wektor)
[1] "numeric"
> is.numeric(wektor)
[1] TRUE
> 0 ten wektor nie jest wektorem znaków
> is.character(wektor)
[1] FALSE
> 0 i żadna z jego wartości nie jest NA
> is.na(wektor)
[1] FALSE FALSE FALSE FALSE FALSE FALSE
y j y Klasę obiektu „widzianą” przez funkcję class() można dowolnie zmie-— niać, o czym jeszcze powiemy więcej w kolejnych rozdziałach. Funkcja
•"A /’> mode() informuje o wewnętrznej reprezentacji danej zmiennej i nie może-# my na wynik tej funkcji bezpośrednio wpływać. Więcej o tych funkcjach przeczytać można w podrozdziale 2.1.6.
Zmienne służą do przechowywaniu wprowadzimy li dany li luli wyników wyki manycli poleceń. Najczęściej te wartości chcemy pr/.ciImwni , aliy mru Je później ponownie wykorzystać. Do wartości zmiennych odwołujemy my pniliijąr nazwę zmiennej. Nazwa zmiennej powinna rozpoczynać się literą, może układać me z lllei, cyfr i kropek. Istotna jest wielkość liter, więc zmienne x 1 X to dwie różne zmienne.
Do zmiennej można przypisać wartość jednym z trzech operatorów przypisania (można też inaczej, ale o tym w uwadze na koniec tego podrozdziału):
• operator = przypisuje wartość znajdującą się z prawej strony do zmiennej znajdującej się po lewej stronie,
• operator <- jak wyżej,
• operator -> przypisuje wartość znajdującą się z lewej strony do zmiennej znajdującej się po prawej stronie.
Do zmiennej wartość można również przypisać korzystając z funkcji assign(base), ale korzystanie z powyższych operatorów jest wygodniejsze. Poniżej różne przykłady przypisania wartości.
c(13, 13) -> zmienna.z.kropka imiełt <- "Ola"
12 - 4
assignC"zmienna",14)
Jeżeli chcemy, by po przypisaniu wartość tego przypisania została wyświetlona na ekranie, to operacje przypisania należy zamknąć w okrągłych nawiasach.
> (zmienna <- 2"10)
Cl] 1024
Warto wspomnieć w tym miejscu o zmiennej .Last.value. Przechowuje ona wynik ostatnio wykonanego polecenia. Ta zmienna może być bardzo przydatna, jeżeli wykonaliśmy jakieś długo liczące się polecenie, a nie zapisaliśmy jego wyniku.
y j y W większości zastosowań operatoiy = i <- można stosować zamiennie.
___ Jednak nie zawsze mają one to samo działanie. Różnica pojawia się np.
A'- gdy operatory te użyte są przy określaniu argumentu funkcji. Operator w = służy do wskazania, który argument funkcji określamy, operator <-zachowuje się jak zwykły operator przypisania (jeszcze do tego wrócimy).
Kolejna różnica polega na tym, że operator <- ma wyższy priorytet. Prześledźmy poniższy kod.
> a = b = 5
> a <- b <- 5
> a = b <- 5
> a <- b = 5 Efror in (a <- b)
tt wszystko ok, obie zmienne mają wartość 5
<t wszystko ok, obie zmienne mają wartość 5
tt wszystko ok, obie zmienne mają wartość 5
tt mamy problem, lewa strona operatora = nie jest zmienną
: could not find tunction