You are on page 1of 17

KURS E-LEARNINGOWY COME UW

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

Poprzedni temat był ogólnym wprowadzeniem do programu. W tym module przedstawione


zostaną podstawy i zasady poruszania się w programie R – pisania poleceń, uruchamiania
podstawowych komend, ładowania i wyświetlania danych. Informacje z tego tygodnia staną
się podstawą wszystkich następnych.

2.1 WCZYTYWANIE DANYCH....................................................................................................................1


2.2 WCZYTYWANIE DANYCH - KROK PO KROKU................................................................................4
2.4 KLASY OBIEKTÓW.................................................................................................................................6
2.5 DEFINIOWANIE OBIEKTÓW...............................................................................................................11
2.6 HISTORIA SESJI.....................................................................................................................................11
2.7 WYŚWIETLANIE DANYCH I WYNIKÓW..........................................................................................13
2.8 ZARZĄDZANIE WYNIKAMI................................................................................................................15
2.9 OPERATORY DZIAŁAŃ.........................................................................................................................15
2.10 MOŻLIWOŚCI GRAFICZNE R............................................................................................................16

2.1 WCZYTYWANIE DANYCH

Wczytanie danych do planowanych obliczeń zazwyczaj jest pierwszym krokiem pracy z


programem. Dane do R można importować z wielu dostępnych formatów, wykorzystując
funkcje zawarte w silniku programu lub w pakiecie dodatkowym foreign::. Wszystkie funkcje
wczytujące mają ogólną składnię postaci:

funkcja("adres",opcje)

Opcje mogą być wpisywane w dowolnej kolejności i definiują m.in.:


 separator danych: średnik (sep=";"), tabulacja (sep="\t"); spacja (sep=" ")
 oznaczenie znaku dziesiętnego: kropka (dec="."), przecinek (dec=",");
 nagłówki – przyjęcie, że pierwszy wiersz jest nagłówkiem (header=T; T dla domyślnie
TRUE / lub F dla domyślnie od FALSE);
 kodowanie pliku z danymi (np. encoding="UTF-8") – inne wartości możliwe do
zastosowania znajdują się w pomocy do R-a.

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.

2023Z – COME R – Moduł 2 str. 1


Poniżej przedstawione są przykładowe składnie funkcji wczytujących dane. Dla każdej z nich
należy użyć inne opcje wczytywania. Ze względu na dużą liczbę możliwości tych opcji,
każdorazowo warto korzystać z pomocy programu. Poniżej zaprezentowane zostały
przykładowe możliwości wprowadzenia danych.

Przedstawione kody korzystają z bieżącego „Working Directory” – katalogu roboczego, dzięki


czemu nie jest konieczne wpisywanie pełnej ścieżki odwołania. Aby ustalić folder domyślny
należy użyć funkcji setwd(). Aby sprawdzić, jaki katalog przypisany należy wpisać getwd().

#sprawdzenie bieżącego katalogu roboczego


getwd()
#ustawienie żądanego katalogu roboczego – przykład
setwd("C:/Zajęcia/R-C/")

W środowisku RStudio można podobnie zmienić katalog roboczy w oknie konsoli podanymi
wyżej funkcjami lub wybrać z menu:

Rysunek 1: Wybór katalogu roboczego w RStudio.

Źródło: Opracowanie własne

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.

library(foreign) # biblioteka wczytująca niektóre formaty plików


getwd() # sprawdza lokalizację katalogu domyślnego

# wczytywanie z pliku tekstowego


dane1<-read.table("dane.txt", header=TRUE, sep="\t", encoding="UTF-8")

# wczytywanie z formatu SPSS


dane2<-read.spss("dane.sav", use.value.labels=FALSE, to.data.frame=TRUE)

2023Z – COME R – Moduł 2 str. 2


# wczytywanie z pliku dbf
dane3<-read.dbf("dane.dbf")

# wczytywanie z pliku rozdzielanego tabulacją


dane4<-read.delim("dane.dat", header=FALSE, sep="\t")

# wczytywanie z pliku CSV


dane5<-read.csv("dane.csv",header=TRUE, sep=";",dec=".",encoding="UTF-8")

# wczytywanie z formatu STATA


dane6<-read.dta("dane.dta", convert.factors=FALSE)

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.

Źródło: Opracowanie własne

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.

Wczytywanie danych „zaawansowanych” jak np. mapy wymaga uprzedniego wczytania


odpowiednich pakietów. Generalna zasada jest, aby zaczynać od wczytania niezbędnych
pakietów funkcją library() i potem wczytania kolejno danych.

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().

2.2 WCZYTYWANIE DANYCH - KROK PO KROKU

Początkujący użytkownik R może mieć problemy z wczytaniem danych z różnych formatów.


Poniższy przewodnik ma za zadanie uporządkować czynności z tym związane.

Krok 1: Wczytywanie bibliotek

Pierwszą czynnością po uruchomieniu R jest wczytanie pakietów dodatkowych. Pakiety można


wczytywać przez klikanie myszą Packages / Load Package, lecz gdy wykorzystuje się większą
liczbę pakietów, ładowanie ich w taki sposób może być uciążliwe. Lepsze jest wtedy stworzenie
kodu startowego i wczytywanie pakietów funkcją library(). Aby sprawdzić, czy pakiet jest w
pamięci programu należy wykorzystać polecenie search().

library(foreign)
search()

Krok 2: Wczytywanie danych

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().

#import danych – postać dla danych przykłądowych z kursu, gdzie kodowanie


znaków w plikach źródłowych jest UTF-8
dane<-read.csv("daneR.csv", header=TRUE, sep=";", encoding=”UTF-8”)

2023Z – COME R – Moduł 2 str. 4


# formatowanie danych
# obiekt klasy data.frame – gwarantuje łatwy do dalszych obliczeń format
danych
dane<-as.data.frame(dane)
dim(dane) # sprawdza wymiary zbioru

Krok 3: Sprawdzenie poprawności wczytania danych

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.

names(dane) # pokazuje nagłówki


class(dane) # sprawdza klasę obiektu, do którego wczytano dane
is.data.frame(dane)# sprawdzenie formatu danych (czy data.frame)
head(dane) # wyświetla pierwszych 6 obserwacji (wierszy) ze zbioru.

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)

2.3 SPECYFIKACJA ZBIORU DANYCH

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

dane<-read.csv("daneR.csv", header=TRUE, sep=";")

# Opis zmiennych – dane powiatowe


XA03 Pracujący w rolnictwie jako w głównym miejscu pracy
XA04 Pracujący w przemyśle jako w głównym miejscu pracy
XA05 Pracujący w usługach jako w głównym miejscu pracy
XA06 Stopa bezrobocia
XA17 Nakłady inwestycyjne w przedsiębiorstwach
XA19 Ludność w wieku przedprodukcyjnym
XA20 Ludność w wieku produkcyjnym
XA21 Ludność w wieku poprodukcyjnym
XA28 Liczba spółek w REGON
XA29 Ludność ogółem
XA30 Przeciętne wynagrodzenie Polska=100%
XA45 Liczba aktywnych zawodowo
XA46 Liczba pracujących

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

XC05 Wypadki śmiertelne na 100.000 mieszkańców

2.4 KLASY OBIEKTÓW

W środowisku R pracuje się na obiektach. To odróżnia program R od innych popularnych


programów obliczeniowych, które często operują na konkretnych zbiorach danych.
Przykładowo, w wielu popularnych pakietach statystycznych można do pewnego czasu było
wczytać jednocześnie tylko jeden zbiór danych.3 W R można pracować na dowolnej liczbie
zbiorów danych naraz, które przechowywane są w obiektach – oczywiście ograniczeniem może
być wielkość pamięci operacyjnej (RAM) komputera, choć istnieją pakiety dodatkowe, które
umożliwiają operacje na ogromnych zbiorach danych, które w tradycyjny sposób nie
„zmieściły” by się w pamięci. Obiekty te mogą zawierać dane źródłowe lub wyniki obliczeń,
które wykorzystuje się w dalszych kalkulacjach.

W zależności od typu informacji przechowywanej w obiekcie, wyróżnia się różne klasy


obiektów. Można je podzielić na podstawowe, zdefiniowane w pakiecie base:: oraz specyficzne
dla poszczególnych pakietów.
Do podstawowych klas obiektów przechowywania danych należą:
 data.frame – podstawowy format, obiekty tej klasy mogą zawierać zmienne liczbowe jak
i nieliczbowe (np. tekstowe), w obiektach tej klasy zawarte są także nagłówki wierszy i
kolumn. Obiekty klasy data.frame są zbiorem wektorów, ale powiązanych wierszami, co
oznacza, że są równej długości. Odwołania do zmiennych w obiekcie (to dane) możliwe
są przez ich nazwy, np. dane$zmienna1.
 matrix – format macierzy, zbiór danych nie zawiera nagłówków wierszy ani kolumn.
Odwołania do elementów obiektu przez notację macierzową, np. dane[,1]
 vector – wektor jest jednym z prostszych typów obiektów. Zawiera n elementów
wyświetlanych jako szereg lub kolumna. Może zawierać elementy liczbowe lub
nieliczbowe. Wektor może być typu: factor (faktor), character (tekstowy), integer
(liczbowy, liczby całkowite), numeric (liczba) i inne .
o factor – jest specjalnym typem wektorów służącym do przechowywania
zmiennych, które mogą być podzielone na kategorie, inaczej zmiennych o pewnej
ograniczonej liczbie poziomów – zmiennych dyskretnych; faktory zawierają w
nazwy poziomów, natomiast sam wektor danych jest reprezentowany przez kody
liczbowe przypisane do tych poziomów.
 list – lista zawiera kilka wektorów, które nie są powiązane wierszami. Wektory te mogą
być różnej długości i typu (liczbowe i tekstowe). Jest to specyficzna klasa obiektów.
Indeksowanie elementów listy wymaga podwójnego nawiasu [[ ]]. Aby przekształcić
obiekt listy w wektor wykorzystuje się funkcję unlist().
3
Przynajmniej tak było jeszcze jakiś czas temu.
2023Z – COME R – Moduł 2 str. 6
 ts – klasa właściwa dla szeregów czasowych (time series). Przypisuje obserwacjom
moment w czasie
 array – klasa zbliżona do macierzy, umożliwia zagnieżdżenie nagłówków

W przykładzie wygenerowane zostały wektory liczbowe i tekstowe, które według możliwości


łączone i przekształcane są w obiekty różnych klas. Wygenerowane wektory a, b, c pytane o
klasę (funkcja class() ) zwracają numeric (dla a i b) oraz character (dla c), co oznacza, że są klasy
vector o specyficznym typie. Obiekt klasy list powstaje przez połączenie funkcją list() kilku
niezależnych różnych wektorów. Obiekt klasy data.frame powstał przez złączenie funkcją
cbind() wektorów równej długości i zadeklarowanie klasy funkcją data.frame(). Obiekt klasy
matrix powstał przez połączenie funkcją c() dwóch wektorów, zadeklarowanie wymiarów
macierzy (liczby wierszy i liczby kolumn) oraz zadeklarowanie klasy funkcją matrix().

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")

# tworzenie obiektu klasy list


obiekt.lista<-list(a=a, b=b, c=c)
obiekt.lista

$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"

# tworzenie obiektu klasy data.frame


obiekt.df<-data.frame(cbind(b, c))
obiekt.df

b c
1 11 aa
2 12 bb
3 13 cc
4 14 dd
5 15 ee

# tworzenie obiektu klasy matrix


obiekt.matrix<-matrix(c(b, c), nrow=5, ncol=2, byrow=FALSE)
obiekt.matrix

[,1] [,2]
[1,] "11" "aa"
[2,] "12" "bb"
[3,] "13" "cc"
[4,] "14" "dd"
[5,] "15" "ee"

lub prościej

# tworzenie obiektu klasy matrix funkcją cbind()

2023Z – COME R – Moduł 2 str. 7


obiekt<-cbind(b,c)
obiekt

b c
[1,] "11" "aa"
[2,] "12" "bb"
[3,] "13" "cc"
[4,] "14" "dd"
[5,] "15" "ee"

class(obiekt)

[1] "matrix"

# wyczyszczenie zmiennych tak, żeby nie wpływały na dalsze przykłady


rm(a,b,c)

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

Powyżej przedstawione zostały klasy obiektów przechowujące dane wejściowe. Wyniki


obliczeń, np. tabel, agregacji, regresji etc. przechowywane są w obiektach innych klas, np.
htest, table etc. lub też w specyficznych klasach tworzonych na użytek danej funkcji. Tak
zdefiniowana klasa obiektu zawiera elementy zgodne z wynikiem działania polecenia
tworzącego obiekt danej klasy. W przypadku regresji do elementów obiektu klasy htest należą
współczynniki regresji, test F, R2 etc. Wyniki tabel (klasy table) zawierają składowe tabeli, jak
wymiary, nagłówki.

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

2023Z – COME R – Moduł 2 str. 8


strukturę obiektu. Elementy te (składowe obiektu) mogą być wykorzystywane w innych
operacjach / obliczeniach.

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():

is.data.frame(dane)# sprawdzenie czy dane są liczbowe

[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)

W analogiczny sposób tworzy się i sprawdza format macierzy (as.matrix() / is.matrix()),


wektora (as.vector() / is.vector()), faktora (as.factor() / is.factor()), listy (as.list() / is.list()),
zmiennej numerycznej (is.numeric() / as.numeric()).

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

2023Z – COME R – Moduł 2 str. 9


do formatu data.frame należy wykorzystać funkcje as.numeric() i levels() jako
as.numeric(levels(f))[f], gdzie f jest zmienną / obiektem problematycznym, np.

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ą).

# set the default help type


# options(help_type="text")
options(help_type="html")

Nieco inaczej (łatwiej do skorzystania) wygląda plik pomocy w R-Studio.


Rysunek 3: Plik pomocy do funkcji lm()

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ć:

nazwa.obiektu <- funkcja (dane, opcje)

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()

[1] “.GlobalEnv” [2] “package:methods”[3] “package:stats”


[4] “package:graphics” [5] “package:utils” [6] “Autoloads”
[7] “package:base”

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().

2.6 HISTORIA SESJI

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.

2023Z – COME R – Moduł 2 str. 11


Rysunek 4: Widok sesji w oknie R Console

Historia poleceń i funkcji wykonanych w sesji uzyskana została przez wpisanie:

history(150) # ostatnich 150 poleceń

Rysunek 5: Historia sesji uzyskana przez history()

Źródło: Opracowanie własne

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).

ls() # sprawdenie obiektów w pamięci R


rm(list=ls())# czyszczenie pamięci ZE WSZYSTKICH OBIEKTÓW!!! OSTROŻNIE!!!

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'

2023Z – COME R – Moduł 2 str. 12


2.7 WYŚWIETLANIE DANYCH I WYNIKÓW

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

Źródło: Opracowanie własne

W środowisku RStudio dane można wyświetlić klikając na zaznaczone na poniższym rysunku


miejsce w panelu ze środowiskiem: zwykle prawy górny panel. Jest to tak naprawdę wykonanie
polecenia View() w konsoli.

Rysunek 7: Wyświetlenie danych w RStudio

Źródło: Opracowanie własne

2023Z – COME R – Moduł 2 str. 13


Dane można także wyświetlić w oknie poleceń R Console na ekranie, korzystając z funkcji
print(). Wyświetlanie podsumowań możliwe jest dzięki funkcjom generycznym (generic
functions), takim jak: print(), plot(), summary(), etc. Używają one różnych metod, zaś postać
wyniku ich działania zależy od klasy pierwszego argumentu.

print(dane) # „wyrzuca” wszystkie dane z obiektu na ekran


print(dane$rok) # wydruk zmiennej rok
dane$rok # tu też można pominąć funkcję print()
summary(dane$XA02) #przykład statystyk dla danej zmiennej

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.

a<-factor(c("Wartość A", "Wartość B", "Wartość C", "Wartość A", "Wartość


B", "Wartość C"))
a

[1] Wartość A Wartość B Wartość C Wartość A Wartość B Wartość C


Levels: Wartość A Wartość B Wartość C

levels(a)

[1] "Wartość A" "Wartość B" "Wartość C"

nlevels(a)
[1] 3

Oprócz wyświetlania całych obiektów możliwe jest też wyświetlanie poszczególnych


elementów tych obiektów. Aby skorzystać z konkretnych „zmiennych” z tych obiektów należy
podawać obiekt$zmienna. W przypadku wielokrotnych operacji na jednym obiekcie warto go
na stałe przypisać do pierwszej pozycji wyszukiwania. Funkcja attach(obiekt) ustawia
domyślne korzystanie ze wskazanego obiektu. Jednak nie zawsze warto deklarować na
sztywno obiekty (zbiory danych), bo w razie ich zmiany trzeba pamiętać, by je „odłączyć” z
pamięci, przez użycie detach(obiekt). Można także wykorzystywać notację macierzową [ , ],
wyświetlić elementy spełniające określone warunki lub wyświetlić danych w postaci tabel
podsumowujących. W notacji macierzowej jako pierwsze podaje się wiersze, zaś dalej
kolumny.5

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.

names(dane) # pokazuje nagłówki

[1] "KOD.GUS" "rok" "powiat" "podregion" "województwo"


[6] "ID.powiat" "ID.podreg" "ID.woj." "id" "XA03"

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.

2.8 ZARZĄDZANIE WYNIKAMI

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.

W jednym z kolejnych modułów postaramy się pokazać możliwości „automatycznego”


generowania raportów z wynikami (i tekstem własnym) przy użyciu implementacji Markdown
(RMarkdown) – języka formatowania stron.

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.

2.9 OPERATORY DZIAŁAŃ

Operatory działań są grupą najbardziej wystandaryzowanych komend w różnych


językach programowania i programach. Poniżej (Tabela 1) przedstawione zostały te najbardziej
popularne i najczęściej wykorzystywane.

2023Z – COME R – Moduł 2 str. 15


Tabela 1: Operatory działań i przykładowe funkcje

+ dodawanie < mniejszy niż ! logiczne NIE abs() wartość bezwzględna


- odejmowanie > większy niż & logiczne ORAZ log() logarytm naturalny
* mnożenie <= mniejszy równy | logiczne LUB sqrt() pierwiastek kwadratowy
/ dzielenie >= większy równy exp() wykładniczo ex
^ potęga == równy log10() logarytm dziesiętny
długość zbioru – liczba
!= różny length()
obserwacji
znak wyrażenia
sign()
1 jeśli >0, -1 jeśli <0
Źródło: Opracowanie własne

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.

a<-1:10 # generowanie liczb naturalnych od 1 do 10


a<7 & a>2

[1] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
a<7 && a>2

[1] FALSE

2.10 MOŻLIWOŚCI GRAFICZNE R

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.

Praca domowa z modułu 2*


Proszę o wczytanie do obiektu np. baza przykładowych danych zawartych w module (na razie
jeszcze tych z lat 1995-2006), a następnie proszę o:
2023Z – COME R – Moduł 2 str. 16
a) utworzenie nowego obiektu klasy data frame o nazwie baza2 w którym:
• pierwsza „zmienna” (kolumna) to liczby porządkowe (naturalne) od 100 do 51
• druga „zmienna” ma stałą wartość=25 (można wykorzystać funkcję rep)
• trzecia „zmienna” liczba wylosowana z liczb całkowitych z zakresu 1:50 (ze
zwracaniem lub bez – można wykorzystać funkcję sample(1:50,50))
• czwarta „zmienna” iloczyn pierwiastka kwadratowego pierwszej zmiennej, kwadratu
drugiej zmiennej oraz trzeciej zmiennej.
b) wyświetlenie statystyk podsumowujących dla trzeciej i czwartej zmiennej z obiektu
baza2.
c) wyświetlenie statystyk podsumowujących dla wybranej zmiennej (ze zmiennych o
nazwach X....) z obiektu baza oraz krótką próbę interpretacji (komentarza, co oznacza
otrzymany wynik) – ew. można doszukać się błędu w tak zaproponowanej analizie tej
zmiennej.
d) sprawdzenie i wyświetlenie liczby poziomów dla jednej ze zmiennych powiat, podregion
lub województwo; proszę też wyświetlić 8 pierwszych „poziomów” dla wybranej
zmiennej.

* Przypominam, że prace domowe przesyłamy dopiero po module 4 – do wyboru (jedna praca


z trzech z modułów 2, 3, 4).

2023Z – COME R – Moduł 2 str. 17

You might also like