Professional Documents
Culture Documents
Moduł 2
Program R w zastosowaniach
ekonomicznych i finansowych Wprowadzenie do R
dr hab. Katarzyna Kopczewska prof. ucz., Aspekty praktyczne
dr hab. Tomasz Kopczewski, dr Mateusz Kopyt
funkcja("adres",opcje)
Wczytane zmienne od razu przypisuje się do nowego obiektu. Wprowadzone dane mogą być
generalnie obiektem zwykle w jednym z czterech formatów (klas): „vector”, „matrix”,
„data.frame” i „list”. Ostatnio popularną klasą obiektu staje się „tribble”. Do większości
obliczeń statystycznych i ekonometrycznych potrzebne są dane w podstawowym układzie,
czyli jako zmienne kolumnowe z nagłówkami, czyli obiekt klasy data.frame.
W środowisku RStudio można podobnie zmienić katalog roboczy w oknie konsoli podanymi
wyżej funkcjami lub wybrać z menu:
Wczytywany plik do R może zawierać polskie litery i spacje w nazwie. Jest to ułatwienie w
stosunku do często stosowanych zasad nazywania plików w niektórych programach
(posiadających różne historyczne ograniczenia). UWAGA! Poniżej są to jedynie przykłady
sposobów wczytywania i każdorazowo należy dostosowywać je do własnych potrzeb.
Import danych z formatu MS Excel nie jest (bezpośrednio) wspierany, dlatego główna
rekomendacja to unikać tego typu operacji – oczywiście można w pełni używać uzyskane z
Excela pliki csv. Obejściem jest wykorzystanie interfejsu R Commander (pakiet Rcmdr), który
pozwala na łatwe importowanie arkuszy z formatu Excel. Pakiet wspiera import z Excela,
Accessa, dBase, SPSS, Minitab, STATA i formatu tekstowego.
Rysunek 2: Interfejs pakietu Rcmdr (R Commander) umożliwiający import danych z Excela, Accessa etc.
W RStudio jakiś czas temu dodano obsługę importu danych z arkuszy MS Excel opartą o pakiet
dodatkowy readxl::. Dostęp w RStudio do wczytania danych z tego formatu dostępny jest z
menu: File -> Import Dataset -> From Excel (w razie potrzeby RStudio zainstaluje wspomniany
wyżej pakiet). Ostatnio powstało sporo pakietów „łatających” uprzedni brak wczytywania
plików xls lub xlsx. Jednym z nich jest pakiet gdata::1. Umożliwia on wczytanie wybranego
arkusza z Excela do obiektu klasy data.frame za pomcą polecenia read.xls(). Poniżej
przykładowa instrukcja wczytywania pliku MS Excel z katalogu roboczego. Proszę zwrócić
uwagę na polecenie ładujące pakiet gdata::. Bardziej zaawansowanych użytkowników prosimy
o sprawdzenie i podzielenie się wrażeniami – w pomocy do tego pakietu można znaleźć sporo
opcji do funkcji read.xls().
1
Innym jest pakietem jest readxl.
2023Z – COME R – Moduł 2 str. 3
library(gdata)
dane7 = read.xls ("myfile.xlsx", sheet = 1, header = TRUE)
Należy pamiętać, że R jest wrażliwy na małe i duże litery w nazwach obiektów, funkcji etc. Po
za tym ukośniki w adresach muszą być postaci /, a nie \. Komentarze rozpoczyna się przez # i
nie trzeba ich kończyć żadnym znakiem.
Po wczytaniu danych warto sprawdzić od razu, czy dane wczytane zostały poprawnie.
Wystarczy policzenie podstawowych statystyk funkcją summary() lub wyświetlenie
nagłówków funkcją names().
library(foreign)
search()
W zależności od typu pliku należy wybrać właściwą funkcję wczytującą dane. Wczytywany pliku
musi być dobrze sformatowany, tzn. znakiem dziesiętnym powinna być kropka (.) - choć przy
ustawieniu odpowiednich opcji wczytania (dec=",") możliwe jest czytanie inaczej
sformatowanych liczb; powinny być też nagłówki dla każdej kolumny. Niekiedy trzeba także
określić kodowanie pliku z danymi – inaczej po wczytaniu danych możemy zgubić polskie litery
lub otrzymać dziwne znaki (tzw. „krzaki”). Często należy uciąć dane do pożądanego wymiaru
(przez wyrażenie warunkowe w nawiasie [ ] - omówione dalej na kursie) oraz przekształcić do
klasy data.frame funkcją as.data.frame().
Aby mieć pewność, że dane zostały poprawnie wczytane warto sprawdzić klasę obiektu (za
pomocą funkcji class()), a w szczególności, czy jest to klasa data.frame (is.data.frame() ), która
jest chyba najbardziej wygodną do późniejszych analiz.
Gdy dane nie wczytują się poprawnie należy sprawdzić takie punkty kluczowe jak:
zmiana kierunku znaku slash z \ na /
poprawność pisowni obiektów, plików, poleceń
ustawienia separatora liczb (może być przecinek, tabulacja, średnik etc)
Do obliczeń przykładowych (tylko w tej lekcji) i zadań wykorzystane zostały dane GUS dla lat
1995-2006 z jednego z paneli badań.2
2
W tym rozdziale do ćwiczeń posłużymy się tymi danymi. Potem będziemy korzystać z bardziej aktualnych
danych.
2023Z – COME R – Moduł 2 str. 5
XB03 Liczba dzieci na 1 miejsce w przedszkolu
XB14 Liczba ludności na aptekę
XB23 Miejsca w przedszkolach
XB24 dzieci w wieku 3-6 lat
a<-c(1,2,3,4,5,6,7,8,9,10)
b<-c(11,12,13,14,15)
c<-c("aa", "bb", "cc", "dd", "ee")
$a
[1] 1 2 3 4 5 6 7 8 9 10
$b
[1] 11 12 13 14 15
$c
[1] "aa" "bb" "cc" "dd" "ee"
b c
1 11 aa
2 12 bb
3 13 cc
4 14 dd
5 15 ee
[,1] [,2]
[1,] "11" "aa"
[2,] "12" "bb"
[3,] "13" "cc"
[4,] "14" "dd"
[5,] "15" "ee"
lub prościej
b c
[1,] "11" "aa"
[2,] "12" "bb"
[3,] "13" "cc"
[4,] "14" "dd"
[5,] "15" "ee"
class(obiekt)
[1] "matrix"
Tworząc wektor z elementami różnego typu R konwertuje wektor na listę lub wektor tekstowy
(character).
aa<-c("1",2,3)
class(aa)
[1] "character"
aa
[1] "1" "2" "3"
bb<-c(1,c,4)
class(bb)
[1] "list"
bb
[[1]]
[1] 1
[[2]]
function (..., recursive = FALSE) .Primitive("c")
[[3]]
[1] 4
Aby sprawdzić, jakiej klasy jest dany obiekt, należy posłużyć się funkcją class(). Przeglądanie
atrybutów obiektów jest wygodne przy użyciu funkcji attributes() lub str(). Pierwsza
wyświetla atrybuty obiektów – tj. elementy, do których dostęp jest przez $ dodawanego po
nazwie obiektu wraz z nazwą danego atrybutu. Druga wyświetla nieco szerszy rezultat podając
Poniżej przedstawiona została operacja tworzenia przykładowej tabeli oraz przeglądanie jej
atrybutów.
x<-table(dane$rok)
x
1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006
379 379 379 379 379 379 379 379 379 379 379 379
class(x)
[1] "table"
attributes(x)
$dim
[1] 12
$dimnames
$dimnames[[1]]
[1] "1995" "1996" "1997" "1998" "1999" "2000" "2001" "2002" "2003" "2004"
[11] "2005" "2006"
$class
[1] "table"
W pracy z R konieczne bywa przechodzenie między różnymi klasami obiektów lub ich
konwersja. Wczytany obiekt danych może być w różnym formacie. Najczęściej używanym jest
tzw. data.frame. Aby sprawdzić, czy dane są w tym formacie wystarczy użyć funkcji
is.data.frame():
[1] TRUE
W sytuacji, gdy dane nie są obiektem tego typu (odpowiedź FALSE) można zdefiniować je w
tym formacie, tworząc nowy obiekt (lub nadpisując stary) funkcją as.data.frame():
dane<-as.data.frame(dane)
WAŻNE: Niekiedy dane po wczytaniu zamiast formatu liczbowego przyjmują format faktora –
zmiennej kategorycznej (klasa factor), czasem z bardzo dużą liczbą kategorii/rodzajów – jest to
sprytna, ale nie zawsze wygodna klasa (sposób) przechowywania danych. Aby przekształcić je
dane$XA1<-as.numeric(levels(dane$XA1))[as.integer(dane$XA1)]
W wypadku gdy chcemy „dostać się” do kodów wewnętrznych faktora możemy użyć
następującej formuły: as.numeric(factor) lub as.integer(factor), gdzie factor jest nazwą
obiektu tego typu.4
O tym, jakiej klasy danych użyć w określonej funkcji informuje plik pomocy dla każdej z nich.
Każdorazowo określona jest klasa / klasy obiektów danych, które są czytane przez funkcję.
Informacji tej należy szukać w sekcji Arguments dla argumentu data. Przykładowo, dla regresji
(funkcja lm() ) wymagane są dane jako data.frame, list lub dowolny obiekt, który przekształca
się do klasy data.frame po konwersji funkcją as.data.frame().
Okno pomocy może wyglądać nieco inaczej niż na poniższym zrzucie ekranu. Zależy to od
ustawienia trybu pokazywania pomocy: okno tekstowe czy też przeglądarka plików html
(przeglądarka internetowa). Można tryby te ustawić podczas instalacji lub też zmieniając
odpowiedni wpis w pliku Rprofile.site w katalogu instalacyjnym programu (np. dla Windows
R\R-3.6.1\etc\). Należy odszukać poniższą sekcję w tym pliku tekstowym i zostawić wybraną
linijkę bez znaku # (w poniższym przypadku wybrano typ pomocy html – jako stronę
internetową).
4
Więcej o faktorach będzie w dalszej części kursu, będzie też łatwiej zrozumieć przedstawione wyżej polecenie.
2023Z – COME R – Moduł 2 str. 10
2.5 DEFINIOWANIE OBIEKTÓW
Program R operuje na obiektach. Jako obiekt rozumiany jest zbiór danych lub wyników. Każdy
obiekt jest określonej klasy. Dane liczbowe mogą być klasy (zazwyczaj): vector, matrix, factor
lub data.frame. Można korzystać z dowolnej liczby obiektów jednocześnie. Jakie są tego zalety?
Po pierwsze można wykorzystywać jednocześnie w obliczeniach z różnych zbiorów danych,
przy czym nie jest wymagane wcześniejsze połączenie tych zbiorów. Poza tym wyniki obliczeń
można dalej wykorzystywać jako zbiory danych.
Podstawowa składnia funkcji tworząca obiekt ma postać:
Obiekty można także tworzyć korzystając z operatorów takich jak +, -, *,/ stosowanych do
danych np: nazwa.obiektu <- obiekt+obiekt. W dalszych obliczeniach można już
wykorzystywać nowy obiekt. Kropki w nazwach mają zwykle funkcję rozdzielania wyrazów lub
wskazują na klasę obiektu (ustalane oczywiście przez użytkownika). Nazwy obiektów nie mogą
być jedynie cyframi, muszą zawierać litery i nie mogą zaczynać się od cyfr.
Przy tworzeniu nowych obiektów lub funkcji należy uważać na ich nazwy. Może się zdarzyć, że
ich nazwy się dublują. R przeszukuje zasoby w ustalonej kolejność. Aby sprawdzić kolejność
przeszukiwania pamięci programu można zastosować funkcję search() :
search()
Pozycja [1] to zawsze .GlobalEnv, pozycje od [2] do [6] zawierają inne pliki (pakiety) z
podstawowymi funkcjami, pozycja [7] to pakiet bazowy. Aby zmienić kolejność dostępu należy
użyć funkcji attach(), która powoduje, że żądane obiekty poszukiwane są w obiekcie
„zaczepionym” przez attach(). Odłączenie obiektu jest możliwe przez detach().
Aby uzyskać dostęp do już wykonanych poleceń można poruszać się klawiszami strzałek lub
wpisać polecenie history(), jako argument podając liczbę ostatnich operacji. W wyniku
wyświetla się nowe okno, z którego można skopiować szukaną funkcję. Okno nie jest
interaktywne i wyświetla jedynie wykonywane polecenia. W sesji wszystkie polecenia i wyniki
wyświetlane są w oknie R Console. W tym oknie w ostatniej aktywnej linii wpisuje się kod do
wykonania.
CIEKAWE: Do wcześniej wpisanych funkcji można odwołać się także naciskając klawisze
strzałek w górę i w dół ( i ). Umożliwia to przechodzenie między poprzedzającymi i
następującymi aktywowanymi funkcjami.
Można także usunąć wszystkie lub wybrane utworzone obiekty z pamięci. W tym celu należy
wykorzystać funkcję rm(). Aby zobaczyć, jakie zbiory danych i/lub obiekty są w pamięci należy
wpisać ls() lub objects() lub kliknąć w menu Misc/List object(s).
W celu wyczyszczenia tylko pojedynczego obiektu należy stosować także funkcję rm(), ale z
podaniem nazwy usuwanego obiektu.
test<-c(9,8,7)
test
[1] 9 8 7
rm(test)
test
BŁĄD: nie znaleziono obiektu 'test'
W „czystym” interfejsie R dane można oglądać otwierając interfejs edytora danych. W tym celu
należy kliknąć w menu Edit/Data Editor i w interfejsie wpisać nazwę obiektu. W interfejsie
można dokonać zmian wartości obserwacji, lecz nie można usunąć wierszy czy kolumn.
Możliwości edycyjne interfejsu są bardzo skromne, stąd jest on raczej wykorzystywany do
przeglądania danych. Otwarcia edytora możemy dokonać także wpisując bezpośrednio
funkcję z klawiatury: fix(nazwa_obiektu)
Rysunek 6: Widok edytora danych
Poziomy zmiennej kategorycznej – faktorów (np. wzrost: niski, średni, wysoki) można
wyświetlić funkcją levels(), zaś liczbę tych poziomów poprzez nlevels(). Poniższy przykład
przedstawia sposób zastosowania tych funkcji.
levels(a)
nlevels(a)
[1] 3
Aby obejrzeć nagłówki zaimportowanych danych należy użyć funkcji names(obiekt). Jest to o
tyle ważne, że w przypadku dobrze zaimportowanych danych każda z nazw „zmiennych” jest
wtedy w osobnym cudzysłowie, zaś w przypadku, gdy dane nie są widziane jako liczby nazwy
zmiennych liczbowych są jednym łącznym nagłówkiem. W przypadku źle zaimportowanych
danych należy zmienić opcje wczytywania danych.
5
Temat będzie szerzej omówiony w dalszych modułach.
2023Z – COME R – Moduł 2 str. 14
[11] "XA04" "XA05" "XA06" "XA17" "XA19"
[16] "XA20" "XA21" "XA28" "XA29" "XA30"
[21] "XA45" "XA46" "XB03" "XB14" "XB17"
[26] "XB23" "XB24" "XC05"
Liczba w nawiasie rozpoczynająca każdą linię wskazuje numer kolumny, w której stoi pierwsza
wymieniona w danym wierszu zmienna, np. XA20 jest 16. kolumną obiektu dane.
Współpraca wyników z R z innymi programami jest dość dobra. Polecenia i wyniki z okna
konsoli (okno poleceń / wyników, R Console) można kopiować w prosty sposób przez
zaznaczenie tekstu do skopiowania, rozwinięcie menu myszki i wybór opcji kopiowania (Copy).
Po wklejeniu wyniku do Edytora tekstowego (np. Libre/OpenOffice lub MS Word) należy
zmienić czcionkę np. na Courier New / Liberation Mono, aby utrzymać schemat
formatowania (odstępy, widok tabeli etc) – są to czcionki o stałej szerokości. Oczywiście jest
możliwość wysyłania wszystkich rezultatów obliczeń bezpośrednio do pliku (np. tekstowego), a
nie na ekran – jest to nieco bardziej zaawansowana metoda.
Szerokość okna konsoli ma wpływ na ilość kolumn / znaków wyświetlanych w jednej linii. Gdy
po skopiowaniu do edytora tekstowego tekst jest za szeroki (i utrzymanie formatowania
wymaga bardzo małej czcionki) wystarczy zmniejszyć okno i aktywować kod wyświetlający
wynik ponownie i powtórzyć operację kopiowania.
Grafikę można kopiować z okna wykresów (oznaczonych na pasku nazwy np. R Graphics: Device
2). Wystarczy najechać myszą na okno wykresu, rozwinąć menu i wybrać Copy as bitmap. W
RStudio jest nawet odpowiednia pozycja w menu w oknie wykresów. Grafikę można wkleić do
edytora tekstowego lub programu graficznego, by ją dalej edytować. Szczegóły operacji na
oknach zawierających grafikę będą w kolejnych modułach.
R operuje polską czcionką. Można nakładać legendę, nagłówki i podpisy z polskimi znakami.
Dotyczy to również nazywania plików importowanych do programu oraz nazw obiektów.
Wyrażenia logiczne mogą być stosowane pojedynczo ( & i |) lub podwójnie (&& i ||). W
przypadku pojedynczego operatora elementy wektorów są porównywane parami i zwracany
jest wektor wartości logicznych. Przy zastosowaniu podwójnego operatora logicznego
wyświetlany jest jeden wynik dla całego zbioru.
[1] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
a<7 && a>2
[1] FALSE
Na deser i bliższe poznanie programu R warto poznać możliwości graficzne. Więcej na ten
temat będzie w kolejnych lekcjach. Jednak aby obejrzeć już teraz małą ich część, można
uruchomić pokaz demonstracyjny. Wystarczy wpisać:
demo(image)
demo(graphics)
demo(persp)
demo(plotmath)
Aktualną i chyba jedną z najpełniejszych próbek możliwości graficznych R-a można znaleźć na
stronie: https://www.r-graph-gallery.com/ Znajdziemy tam wykresy od podstawowych typu
słupkowe lub kołowe, poprzez wykresy pokazujące korelacje, rozkłady, wykresy bazujące na
mapach oraz wykresy animowane. Większość z przedstawionych grafik opiera się o pakiet
dodatkowy ggplot2::, który też pojawi się zapewne na naszych zajęciach. Warto poszukać
jeszcze przykładów rysunków (np. trójwymiarowych) stworzonych w R – zdarzają się dość
skomplikowane efekty prac entuzjastów naszego programu.