2012/2013
Lab. 1
1
BADANIA PREFERENCJI – Wstęp do programu R
Studia niestacjonarne II stopnia, Kierunek „Ekonomia”, II rok, III semestr (zimowy)
Prof. UE dr hab. Andrzej Bąk
Wprowadzenie do programu R
1. Uruchomienie programu R
Rgui.exe
rgui
Za pomocą ikony
Znak zachęty
>
2. Tryby pracy
tryb interaktywny (polecenia wpisywane w oknie konsoli)
tryb wsadowy, wykonywanie zawartości skryptów – funkcja source("skrypt.r")
tryb „nadzorowany” (praca z wykorzystaniem powłoki typu Rcmdr)
3. Zakończenie pracy z programem R
q()
quit()
File | Exit
Za pomocą ikony
Pytanie: Save workspace image? Tak Nie Anuluj
4. Katalog roboczy
setwd()
np. setwd("c:/rtmp") lub
setwd("c:\\rtmp")
lub polecenie File | Change dir…
getwd()
dir()
5. Konsola użytkownika
Konsola użytkownika służy do komunikacji z programem R za pomocą poleceń. Polecenia to wyrażenia lub
przypisania. W poleceniach występują funkcje, operatory, instrukcje, stałe, zmienne, literały i inne obiekty.
Wielkość liter, którymi pisane są polecenia jest rozróżniana przez interpreter języka podczas dialogu z
wykorzystaniem konsoli oraz w czasie wykonywania skryptów napisanych w języku R (np. A i a to różne
znaki).
Enter
Ctrl L
Home End Backspace Delete
Esc
Ctrl C Ctrl X Ctrl V
Tab
Akceptacja polecenia
Usunięcie zawartości konsoli
Przywołanie wykonanego polecenia (historia poleceń)
Modyfikacja przywołanego polecenia
Przerwanie wykonywanego polecenia (zatrzymanie interpretera
poleceń)
Kopiowanie, wycinanie, wklejanie
Uzupełnianie poleceń
Ustawienie
katalogu
roboczego
!
2012/2013
Lab. 1
2
6. Menu programu
Polecenia z menu File
Source R code…
wykonanie skryptu w języku R – funkcja source()
(uwaga: funkcja print())
New script
utworzenie nowego skryptu
Open script…
edycja istniejącego skryptu
Display file(s)…
wyświetlenie zawartości folderu roboczego
Load Workspace…
wczytanie z pliku dyskowego do pamięci zapisanej zawartości przestrzeni roboczej
(stanu obiektów)
Save Workspace…
zapisanie w pliku dyskowym zawartości przestrzeni roboczej (stanu obiektów)
Load History…
odczytanie z pliku dyskowego historii wykonanych poleceń (np. w poprzedniej sesji)
Save History…
zapisanie w pliku dyskowym historii wykonanych poleceń
Change dir…
zmiana folderu roboczego – funkcja setwd()
Print…
wydrukowanie zawartości konsoli lub skryptu
Save to File…
zapisanie w pliku tekstowym zawartości konsoli
Exit
wyjście z programu
Polecenia z menu Help
Console
klawisze używane podczas pracy z konsolą
FAQ on R
najczęściej zadawane pytania o R
FAQ on R for Windows
najczęściej zadawane pytania o R w wersji dla Windows
Manuals (in PDF)
zbiór podręczników w plikach PDF
R functions (text)…
pomoc na temat funkcji programu (języka) R
Html help
pomoc w formacie HTML – funkcja help.start()
Html search page
przeszukiwanie stron www
Search help…
wyszukiwanie informacji w zainstalowanych pakietach –
funkcja help.search()
search.r-
project.org… wyszukiwanie informacji na stronach internetowych projektu R –
funkcja RSiteSearch()
Apropos…
wyświetlenie funkcji zawierających podany ciąg znaków – funkcja apropos()
R Project home page
strona domowa projektu R http://www.r-project.org/
CRAN home page
strona domowa zasobów (serwery lustrzane)
About
O wersji R
Pomoc wywoływana w oknie konsoli:
> help()
> help("date")
> ?date
> example(date)
> args(date)
> apropos("help")
> help.search("date")
Polecenia z menu Packages
Loa
d package…
wczytanie pakietu do pamięci (library())
Set CRAN mirror…
wybór serwera CRAN
Select repositories
wybór repozytoriów z pakietami
Install package(s)…
instalacja pakietu
Update packages…
aktualizacja pakietu
Install package(s) from local zip files…
instalacja pakietu z pliku zip na dysku lokalnym
7. Przykłady prostych obliczeń (wynik jest wyświetlany w oknie konsoli)
> 2+2
[1] 4
> 2^10
[1] 1024
Praca ze
skryptami
w języku R
2012/2013
Lab. 1
3
> 3*15+5
#znak # poprzedza komentarz pomijany przez interpreter
[1] 50
> 3*(15+5)
#hierarchia operatorów
[1] 60
> -3^2
[1] -9
> (-3)^2
#hierarchia operatorów
[1] 9
> (-3)^3
#hierarchia operatorów
[1] -27
> 2^10-1
#hierarchia operatorów
[1] 1023
> 1/5
[1] 0.2
#domyślny separator miejsc dziesiętnych
8. Operatory przypisania (wynik jest przypisywany do zmiennej, obiektu)
Operatory przypisania umożliwiają tworzenie obiektów, np. zmiennych lub funkcji. Zmienne służą do
przechowywania w pamięci operacyjnej wartości, np. wyników obliczeń. Funkcje natomiast są zapisanymi w
języku R algorytmami obliczeniowymi. Do operatorów przypisania należą: <- -> =
Najczęściej korzysta się z operatora <-
> s<-2+2
#najczęściej stosowany operator przypisania
> s
#wyświetlenie wyniku przypisanego do zmiennej s
[1] 4
> (r<-50-25)
#przypisanie wyniku do zmiennej r i jego wyświetlenie
[1] 25
> 50-25->r
#rzadziej stosowany operator przypisania
> r
[1] 25
9. Przykłady użycia funkcji języka R
Funkcje są wywoływane za pomocą nazwy z nawiasami (). Jeżeli funkcja nie wymaga argumentów, to dodaje
się nawiasy puste, w przeciwnym razie w nawiasach umieszcza się argumenty.
Funkcja date() nie wymaga argumentów, a funkcja sqrt() wymaga argumentu w postaci liczby lub obiektu
zawierającego liczbę.
Nazwy obiektów mogą zawierać znaki alfanumeryczne oraz kropkę i podkreślenie. Nie są dozwolone w
nazwach obiektów np. operatory.
> date()
#funkcja bez argumentów
[1] "Mon Oct 13 20:44:55 2008"
> sqrt(9)
#funkcja wymagająca jednego argumentu
[1] 3
> sqrt(-9)
#komunikat o błędnym argumencie
[1] NaN
Warning message:
In sqrt(-9) : NaNs produced
> log(1024,2)
#funkcja wymagająca dwóch argumentów
[1] 10
> ls()
#wyświetlenie obiektów utworzonych w pamięci operacyjnej
[1] "r" "w"
2012/2013
Lab. 1
4
> rm("r")
#usunięcie obiektu r z pamięci operacyjnej
> ls()
[1] "w"
#operator = użyty do przypisania wartości argumentowi funkcji
> rm(list=ls(all=TRUE)) #usunięcie wszystkich obiektów z pamięci RAM
> ls()
character(0)
Funkcja c() – combine (łączenie argumentów)
> c(1,2,3)
[1] 1 2 3
> c(1:10)
#operator zakresu :
[1] 1 2 3 4 5 6 7 8 9 10
> c(1:5,"a","b","c")
#łączenie typów w wektorze; jakie są konsekwencje?
[1] "1" "2" "3" "4" "5" "a" "b" "c"
Praca z programem R
1. Katalog roboczy, utworzenie katalogu roboczego
Utworzenie własnego katalogu roboczego, np. za pomocą programu Eksplorator Windows.
Uruchomienie programu R
> setwd("C:/rtmp")
# zmiana katalogu roboczego
lub polecenie File | Change dir…
> getwd()
# wyświetlenie aktualnego katalogu roboczego
> dir()
#wyświetlenie zawartości katalogu roboczego
2. Generowanie ciągów arytmetycznych
– operator zakresu : i funkcja c() – liczby całkowite w przedziale od 1 do 100 i od 25 do 1
> c(1:100); > c(25:1)
– funkcja seq() – generuje liczby w przedziale od –10 do 10 z krokiem 1
> seq(-10,10,1)
– funkcja seq() – przykład generowania liczb w przedziale od 1 do 10 z krokiem 0,5
> seq(1,10,by=0.5) #by–krok, = operator przypisania wartości argumentowi
– funkcja seq() – przykład użycia funkcji do generowania wartości w przedziale <–2
; 2
> dla sin(x)
> x <- seq(-2*pi,2*pi,by=0.1)
> plot(x,sin(x),type="l")
# narysowanie wykresu funkcji sin(x)
– funkcja seq() – z argumentami length, from, to
> seq(length=6,from=2,to=5)
– funkcja rep() – powtórzenie (replikacja) wektora liczb 1:5 (10 razy)
> rep(c(1:5),10)
– funkcja rep() – powtórzenie (replikacja) wektora liczb 1:5 (każdy element powtórzony 3 razy)
> rep(c(1:5),each=3)
– funkcja rep() – powtórzenie (replikacja) wektora liczb 1:5 (długość wektora 21 elementów)
2012/2013
Lab. 1
5
> rep(c(1:5),length.out=21)
– funkcja rep() – powtórzenie (replikacja) wektora znaków
> rep("a",15)
3. Generowanie liczb (ciągów) losowych
funkcja sample(x,size,replace=FALSE,prob=NULL) – próba losowa
x
either a (numeric, complex, character or logical) vector of more than one element from which
to choose, or a positive integer.
size
non-negative integer giving the number of items to choose.
replace
should sampling be with replacement?
prob
a vector of probability weights for obtaining the elements of the vector being sampled.
> sample(1:20,5)
> sample(20,5)
> sample(10,5,replace=TRUE)
#losowane wartości mogą się powtarzać
> sample(49,6,replace=FALSE) #losowane wartości nie mogą się powtarzać
> sample(letters,5)
#losowanie znaków (małe litery alfabetu)
> sample(LETTERS,5)
#losowanie znaków (wielkie litery alfabetu)
funkcje runif() i rnorm()
> runif(5)
#rozkład jednostajny
> rnorm(10,mean=0,sd=1) #rozkład normlany o parametrach mean i sd
4. Tworzenie wektorów za pomocą funkcji: vector(), numeric(), logical(), character()
> x<-vector(mode="numeric",length=10)
#wektor z elementami liczbowymi
> x
> x<-vector(mode="character",length=10) #wektor z elementami znakowymi
> x
> x<-vector(mode="logical",length=10)
#wektor z elementami logicznymi
> x
> numeric(10)
> logical(10)
> character(10)
5. Tworzenie macierzy za pomocą funkcji: dim(), matrix(), array()
> X<-1:24
> dim(X)<-c(4,6) #ustalenie wymiarów macierzy
> dim(X)<-c(2,12) #ustalenie wymiarów macierzy
> X
> X<-matrix(1:24,nrow=4,ncol=6)
> X
#wyświetlanie elementów macierzy
> X<-matrix(1:24,nrow=4,ncol=6,byrow=TRUE)
#układ wierszami
> X
> X<-matrix(1:24,nrow=4,ncol=6,byrow=FALSE)
#układ kolumnami
> X[1,]
#wyświetlanie wybranych elementów macierzy
> X[,1]
> X[1,6]
> X[1:3,2]
> X<-matrix(nrow=2,ncol=3,byrow=TRUE)
#brak danych
> X
> X<-matrix(0,nrow=2,ncol=3,byrow=TRUE) #macierz wypełniona 0
> X
> X<-matrix(T,nrow=2,ncol=3,byrow=TRUE) #macierz wypełniona TRUE
> X
2012/2013
Lab. 1
6
> array(1:12,c(3,4))
> array(1:12,c(4,3))
> array(1:12,c(3,2,2)) #macierz trójwymiarowa
6. Tworzenie listy za pomocą funkcji: list()
> lista<-list(1:3,c("a","b","c"),c(F,T))
> lista
> lista[2]
> lista[[2]][2]
> Lista<-list(liczby=1:3,znaki=c("a","b","c"),logiczne=c(F,T))
> Lista
> Lista$znaki
7. Tworzenie tabeli danych za pomocą funkcji: data.frame()
> a<-sample(c(TRUE,FALSE),10,replace=TRUE); b<-LETTERS[1:10]
> c<-runif(10); d<-month.abb[1:10]
> a; b; c; d
> tab<-data.frame(a,b,c,d)
#utworzenie tabeli danych
> tab
> colnames(tab)<-c("Logiczne","Znakowe","Liczbowe","Tekstowe")
#nazwy
kolumn
> tab
8. Zapisywanie tabeli danych w pliku dyskowym za pomocą funkcji: write.table(), write.csv(),
write.csv2()
> write.table(tab,file="tabela.txt")
> write.csv(tab,file="tabela1.csv")
> write.csv2(tab,file="tabela2.csv")
#separator miejsc dziesiętnych „,”
> write.csv2(tab,file="tabela3.csv",row.names=FALSE) #bez numerów wierszy
9. Odczytywanie tabeli danych z pliku dyskowego za pomocą funkcji: read.table(), read.csv(),
read.csv2()
> tbl<-read.table("tabela.txt")
> tbl1<-read.csv("tabela1.csv")
> tbl2<-read.csv2("tabela2.csv")
> tbl3<-read.csv2("tabela3.csv")
> tbl
> tbl3
2012/2013
Lab. 1
7
Elementy programowania w języku R
1. Operatory
Przypisania:
<– –> =
Logiczne:
!
negacja
|
suma logiczna (listy i wektory)
||
suma logiczna (pojedyncze wartości)
&
iloczyn logiczny (listy i wektory)
&&
iloczyn logiczny (pojedyncze wartości)
Relacyjne (porównywanie wartości): == != < <= > >=
Arytmetyczne: + - * / ^
%%
dzielenie modulo (wynikiem jest reszta z dzielenia)
%/%
dzielenie całkowite (pominięcie reszty z dzielenia)
%*%
mnożenie macierzy
2. Grupowanie wyrażeń za pomocą instrukcji: {}
3. Instrukcje sterujące
Instrukcja warunkowa (pojedyncze wartości): if(warunek) wyrazenie1 else wyrazenie2
Funkcja warunkowa (wektory): ifelse(warunek, wyrazenie1, wyrazenie2)
4. Instrukcje iteracyjne
Pętla z ustaloną z góry liczbą powtórzeń: for(zmienna in od:do) wyrazenie
Iteracja, w której warunek sprawdzany jest na wejściu: while(warunek) wyrazenie
Iteracja, w której warunek sprawdzany jest na wyjściu: repeat wyrazenie
5. Funkcje użytkownika
Instrukcja definiowania funkcji:
nazwa<-function(argumenty) wyrazenie
return(wyrazenie)
lub
nazwa<-function(argumenty)
{
wyrazenia
return(wyrazenie)
}
6. Przykłady wyrażeń
> 2==2
> 2!=2
> 5%%2
> 5%/%2
2012/2013
Lab. 1
8
> w<-c(1:10)
> w
> sum(w)
#wynik 55, co to oznacza?
> sum(w>6)
#wynik 4, co to oznacza?
> sum(w[w>6])
#wynik 34, co to oznacza?
A<-matrix(c(1:9),nrow=3,ncol=3)
B<-matrix(c(-1:-9),nrow=3,ncol=3)
C<-A%*%B
#jakie macierze prostokątne można mnożyć?
> 2011%%4==0&&2011%%100!=0||2011%%400==0
#co oblicza to wyrażenie?
Użyj w tym wyrażeniu zmiennej r zamiast stałej 2011 (np. r<-2011)
Sprawdź inne lata, np. 2012, 2013 itd.
Wyrażenia z instrukcją (funkcją) warunkową:
> if(1234%%2==0) print("parzysta") else print("nieparzysta")
> sum(ifelse(1:123%%2==0,1,0))
#co oznacza wynik 61?
7. Przykłady funkcji użytkownika
Funkcje użytkownika zapisuje się w skryptach (plikach dyskowych), np. nazwa_skryptu.r
Nowy skrypt można zapisać w edytorze programu R uruchamianym poleceniem File | New script
Edycję istniejącego skryptu (poprawę, rozbudowę, testowanie, uruchamianie poszczególnych wierszy
programu) można prowadzić za pomocą polecenia File | Open script…
Wykonanie skryptu umożliwia polecenie File | Source R code… (funkcja source())
(1) Ciąg Fibonacciego (1202 r.):
2
dla
2
,
1
dla
1
2
1
n
F
F
n
F
n
n
n
Pierwsze 10 wyrazów ciągu Fibonacciego: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55. Skrypt Fibonacci.r
#Fibonacci(n) - funkcja znajdująca n liczb ciągu Fibonacciego
#wywołanie - fib<-Fibonacci(n)
Fibonacci<-function(n)
{
if(n>2 && n<=20)
{
fib<-numeric(n)
fib[1:2] <- 1
for(i in 3:n) {fib[i]<-fib[i-1]+fib[i-2]}
}
else {fib<-"n<2 lub n>20"}
return(fib)
}
Wywołanie funkcji Fibonacci()
> #te wiersze należy wpisać w oknie konsoli po wcześniejszym uruchomieniu
> #funkcji Fibonacci() za pomocą funkcji source()
> fib<-Fibonacci(20)
> fib
2012/2013
Lab. 1
9
(2) Algorytm Euklidesa (Eudoksos z Knidos (IV wiek p.n.e.)): największy wspólny dzielnik dwóch liczb
całkowitych. Skrypt Euklides.r
#Euklides(a,b) - funkcja znajdująca NWD dwóch liczb całkowitych
#wywołanie - nwd<-Euklides(a,b)
Euklides<-function(a,b)
{
while(a!=b)
{
if(a>b) {a<-a-b} else {b<-b-a}
}
return(a)
}
#te wiersze będą wykonane po uruchomieniu funkcji
nwd<-Euklides(55,100)
print(nwd) # funkcja print wyświetla wyniki w trybie source()
8. Uruchomienie skryptu
source("Fibonacci.r")
lub File | Source R code…
source("Euklides.r")
lub File | Source R code…
2012/2013
Lab. 1
10
9. Instalacja pakietów (Internet)
2012/2013
Lab. 1
11
Analiza conjoint w programie R
Pakiet
conjoint
Bąk A., Bartłomowicz T. (2012), Package conjoint. Conjoint analysis package,
http://cran.r-project.org/web/packages/conjoint
2012/2013
Lab. 1
12
Instalacja pakietu conjoint:
Wczytanie pakietu conjoint do pamięci:
> library(conjoint)
2012/2013
Lab. 1
13
Podręcznik pakietu conjoint
2012/2013
Lab. 1
14
Strona Katedry Ekonometrii i Informatyki
http://wgrit.ae.jgora.pl/keii/conjoint/index.html