Spletna stran, namestitev, dokumentacija
Dokumentacija na linuxu: /usr/share/doc/r-doc-html/manual
.
Pomoč v R-ovem pozivniku:
help(
točno določena funkcija)
help.search(
"nekaj približnega")
Iz pozivnika našega operacijskega sistema program zaženemo z ukazom R
.
Če ni določeno drugače, se znajdemo v R-ovem pozivniku.
Program lahko zaženemo z obilo opcijami. Njihov seznam izpiše ukaz R -h
ali R --help
(in nato takoj konča).
R ne zažene pozivnika in le izpiše rezultat, nakar konča, če mu na vhodu predpišemo ukazni niz.
To pa je lahko:
< datoteka
.
V tem primeru mu moramo predpisati še opcijo --save
, --no-save
ali --vanilla
.-f
oziroma --file
.-e
.--slave
, ki izključi ves nenujni izhod.
Zadnjo vrnjeno vrednost dobimo z ukazom .Last.value
.
Izhod iz programa dosežemo z ukazom q()
.
Elementarne binarne operacije:
+
,
-
,
*
,
/
in
^
oziroma **
Elementarne funkcije:
sqrt
,
exp
,
log
,
sin
,
cos
,
tan
,
asin
,
acos
,
atan
Konstanta: pi
Izpis na določeno število (n) signifikantnih decimalk:
print(x, digits=n)
.
Več o izpisovanju kasneje.
Zaokrožitvene funkcije:
trunc
,
round
,
floor
,
ceiling
Fakulteta: factorial
Funkcija gama: gamma
Binomski simbol: choose(n, k)
vrne n nad k.
Naključna števila: runif(1)
vrne psevdonaključno število med 0 in 1
z enakomerno porazdelitvijo. Več o naključnih številih kasneje.
R pozna tudi kompleksna števila. Pred i
mora stati število:
imaginarno enoto torej dobimo z ukazom 1i
. Bolj sofisticirane
konstrukcije kompleksnih števil (npr. v polarni obliki) dobimo z ukazom
complex
. Operacije na kompleksnih številih:
Re
vrne realno komponento.Im
vrne imaginarno komponento.Mod
vrne absolutno vrednost.Arg
vrne argument (kot v polarnem zapisu).Conj
vrne konjugirano vrednost.Prireditev:
x <-
nekaj ali nekaj ->
x
Izbris:
rm(x)
ali tudi rm(x, y)
.
Ukaz ls
vrne seznam vseh simbolov, ki so trenutno definirani, razen
tistih, katerih imena se začenjajo s piko. Če želimo vključiti še te, vnesemo
ls(all=TRUE)
.
Ukaz rm(list=ls(all=TRUE))
izbriše vse trenutno definirane simbole.
Osnovni podatkovni tipi:
integer(-42)
), realna (npr. 1.23
) in kompleksna
(npr. 2 + 1i
);"Zemlja"
);TRUE
, FALSE
;NULL
.Anonimna funkcija:
function(parametri) { telo }
Funkcija z imenom:
ime <- function(parametri) { telo }
Ukaz plot(funkcija, sp. meja, zg. meja)
nariše graf funkcije.
uniroot(f, c(a, b))
vrne ničlo zvezne funkcije f
na intervalu [a, b]. Vrednosti na krajiščih morata imeti nasproten
predznak. Vselej vrne le eno ničlo.
Pravzaprav vrne celotno poročilo o ničli.
Če želimo le ničlo, ukažemo:
uniroot(f, c(a, b))$root
.
integrate(f, a, b)
numerično integrira funkcijo
f od a do b.
TODA POZOR! integrate
posreduje funkciji kar cel vektor!
Spet vrne celo poročilo, če želimo le vrednost, ukažemo:
integrate(f, a, b)$value
.
Primer konstrukcije vektorja: c(7, 8, 9)
, kar da
isto kot 7:9
ali seq(7, 9)
.
Pri ukazu seq
lahko predpišemo tudi korak, recimo
seq(70, 90, 10)
.
runif(n)
vrne naključni vektor dolžine n.
Več o tem kasneje.
Vektorje lahko tvorimo tudi iz nizov:
x <- c("Merkur",
"Venera",
"Zemlja",
"Mars",
"Jupiter",
"Saturn",
"Uran",
"Neptun").
Ukaz c
tudi združuje vektorje.
Vektorje lahko obravnavamo tako kot množice.
unique
iz vektorja odstrani vrednosti, ki se ponavljajo.union
vrne unijo množic (pri čemer odstrani vrednosti, ki se ponavljajo).intersection
vrne presek množic.setdiff(a, b)
vrne razliko množic, t. j. a - b.setequal(a, b)
vrne TRUE, če sta množici a in b enaki, sicer pa FALSE.POZOR! Vsi elementi v vektorju morajo biti istega tipa. Če so tipi različni, se nižji tipi pretvorijo v višje. Primeri:
c(1, 2, "Zemlja")
se pretvori v
c("1", "2", "Zemlja")
.c(1, 2, TRUE)
se pretvori v c(1, 2, 1)
.c(1, 2, TRUE, "Zemlja")
se pretvori v
c("1", "2", "TRUE", "Zemlja")
.Če ni določeno drugače, ukaz c
izpusti vrednosti
NULL
.
Če lahko elemente vektorja primerjamo, lahko vektor sortiramo s funkcijo sort
.
Z ukazom [ ... ]
dobimo ven posamezne komponente vektorja. Natančneje,
če je v vektor, ukaz v[i]
deluje odvisno od narave
objekta i na naslednji način:
v[c(2, 4, 3, 2)]
in ne recimo v[2, 4, 3, 2]
: slednje pomeni večdimenzionalni indeks v tabeli –
glej kasneje.TRUE
.Ponovitev elementa ali vektorja: rep(vrednost ali vektor, kolikokrat)
Ciklanje vektorja: rep(vektor, length.out=želena dolžina)
Obrat vektorja: rev(x)
vrne vektor x od zadaj naprej.
Če je k naravno število:
head(v, k)
vrne prvih k elementov vektorja vhead(v, -k)
vrne vektor v z izpuščenimi zadnjimi k elementi.tail(v, k)
vrne zadnjih k elementov vektorja vtail(v, -k)
vrne vektor v z izpuščenimi prvimi k elementi.Ukaz
plot(x)
nariše točke, ki pripadajo koordinatam vektorja x.
To je isto kot plot(x, type="p")
.
Druge opcije za type
:
"l"
: nariše lomljenko;"b"
: točke poveže z daljicami;"h"
: nariše histogram iz navpičnih črt;"s"
: nariše stopnice, pri čemer gre posamezna stopnica desno od točke;"S"
: nariše stopnice, pri čemer gre posamezna stopnica levo od točke;barplot(x)
nariše vektor x v obliki lepega histograma.
Vse operacije, definirane na skalarjih, se na vektorjih izvajajo po komponentah. Če vektorja, ki
nastopata kot argumenta dvomestne operacije, nimata iste dolžine, se krajši začne ciklati.
Tako npr. ukaz
c(1, 2, 3, 4, 5, 6)*c(-10, 0, 10)
vrne isto kot ukaz
c(-10, 0, 30, -40, 0, 60)
.
Če dolžina daljšega ni večkratnik dolžine krajšega, se izda opozorilo.
To velja tudi za logične primerjave. Tako npr. ukaz as.numeric(seq(1, n) == k)
vrne k
-ti standardni bazni vektor standardnega n
-razsežnega evklidskega prostora.
Matriko:
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
10 | 11 | 12 |
matrix(c(1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12), nrow=4, ncol=3)
matrix(1:12, nrow=4, ncol=3, byrow=TRUE)
array(c(1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12), dim=c(4, 3))
rbind(1:3, 4:6, 7:9, 10:12)
cbind(c(1, 4, 7, 10), c(2, 5, 8, 11), c(3, 6, 9, 12))
Preprost je tudi vnos diagonalnih matrik, npr.
diag(3, nrow=5)
ali
diag(c(3, 2, 4, 5, 1))
.
Priklic elementov matrike:
A[i, j]
vrne element v i-ti
vrstici in j-tem stolpcu matrike A.A[i,]
vrne i-to vrstico matrike A.A[,j]
vrne j-ti stolpec matrike A.A[i]
vrne i-ti element matrike, pri čemer
so elementi urejeni po stolpcih. Tako pri zgornji matriki
A[8]
vrne 11
.Ukaz c(A)
ali as.vector(A)
iz matrike
A naredi dolg vektor, pri čemer združuje po stolpcih.
Vse aritmetične in logične operacije delujejo tudi na vektorjih in matrikah – po komponentah.
Tako A*B
zmnoži matriki A in B
po komponentah.
Ukaz A + 2
pa vrne matriko A, ki ima vse
elemente povečane za 2.
Še en primer:
v = c(0, 2, 3, -1, 4, 3, -2, 2); v[v >= 0]
vrne isto kot c(0, 2, 3, 4)
.
Seveda lahko matrike in vektorje posredujemo tudi funkcijam.
Recimo (function(x) { x ** 3 + x })(0:3)
vrne isto kot
c(0, 2, 10, 30)
.
Matrične operacije:
%*%
: matrično množenje%o%
: tenzorski produkt – množenje vsake komponente z vsakot
: transponiranjedet
: determinantasolve(A, B)
: reši sistem Ax = bsolve(A)
: poišče A-1eigen(A)
: poišče lastne vrednosti in lastne vektorje
(dobro deluje le, če se da matrika diagonalizirati)Osnovna obdelava podatkov na vektorjih in matrikah:
sum(x)
: vsota elementov vektorja ali matrikeprod(x)
: produkt elementov vektorja ali matrikemean(x)
: povprečje elementov vektorja ali matrikesd(x)
: popravljeni standardni odklon elementov
vektorja ali matrikecumsum(x)
: vektor iz kumulativnih vsotcumprod(x)
: vektor iz kumulativnih produktovmin(x)
: minimum elementovmax(x)
: maksimum elementovPosredovanje funkcij po komponentah:
sapply(vektor ali matrika, funkcija)
posreduje funkcijo posameznim
komponentam vektorja ali matrike. Tako npr. ukazsapply(c(x1, ... xn), f)
c(f(x1), ... f(xn))
.
apply(matrika, 1, funkcija)
posreduje funkcijo posameznim
vrsticam.apply(matrika, 2, funkcija)
posreduje funkcijo posameznim
stolpcem.apply
deluje na poljubnodimenzionalnih
tabelah. V drugem argumentu določimo številke dimenzij, ki ostanejo.mapply(f, c(x11, ... x1n), ...
c(xm1, ... xmn))
vrne
c(f(x11, ... xm1), ...
f(x1n, ... xmn))
.outer(c(x1, ... xm),
c(y1, ... yn), FUN=f)
vrne matriko z elementi f(xi, yj).%o%
se da definirati z ukazom outer
,
kjer za funkcijo izberemo množenje.outer(c(x1, ... xm),
c(y1, ... yn),
FUN=Vectorize(f))
ali tudiouter(c(x1, ... xm),
c(y1, ... yn),
FUN=function(v1, v2) { mapply(f, v1, v2) } )
.
Tabele imajo lahko poljubno mnogo dimenzij. Dobimo jih lahko iz vektorjev z ukazom:
array(vektor, dim=c(dimenzije))
.
Z ukazom [ ... ]
lahko podobno kot pri matrikah izluščimo
poljubnodimenzionalne komponente tabele.
Vektor z označenimi indeksi lahko dobimo z ukazom
c(oznaka1 = vrednost1, oznaka2 = vrednost2, ... )
.
Lahko pa konstruiramo tudi enodimenzionalno tabelo z ukazom array
.
Primer:
array(c(20, 50, 30), dimnames=list(c("prvi", "drugi", "tretji")))
Seveda nastavitev dimnames
deluje za poljubnodimenzionalno
tabelo. Deluje tudi pri ukazu matrix
. Primer:
matrix(1:12, nrow=4, ncol=3, byrow=TRUE,
dimnames=list(c("prva", "druga", "tretja", "cetrta"),
c("prvi", "drugi", "tretji")))
Vrsticam in stolpcem lahko imena prirejamo ali spreminjamo tudi
naknadno, recimo:
dimnames(x) <- list(c("prvi", "drugi", "tretji"))
.
POZOR! Vektor ni enodimenzionalna tabela, zato mu ne moremo
prirejati nastavitve dimnames
. Če želimo to, ga moramo najprej
z ukazom array
pretvoriti v enodimenzionalno tabelo.
Če ima tabela označene indekse, jih lahko uporabimo tudi znotraj
oklepajev [ ... ]
. Seveda pa lahko še vedno uporabimo tudi številke.
Oznake komponent upoštevata tudi ukaza plot
in boxplot
.
Zapisi so objekti, sestavljeni iz več komponent, ki so lahko različnih tipov.
Komponentam bomo rekli rubrike.
Zapise konstruiramo z ukazom list
. Primer:
nas_clovek <- list(ime="Janez", starost=35, zakonec="Marija", starosti_otrok=c(15, 13, 2))
.
Posamezne rubrike dobimo z ukazom $
, npr. nas_clovek$ime
.
Lahko uporabimo tudi nas_clovek[["ime"]]
. Lahko priklicujemo
nadaljnje komponente, npr. nas_clovek$starosti_otrok[2]
.
Z oglatimi oklepaji izluščimo del zapisa, npr.
nas_clovek[ime]
ali nas_clovek[c("ime", "starost")]
.
Imena rubrik dobimo in nastavljamo z ukazom names
.
Kontingenčne tabele so eno- ali dvodimenzionalne tabele z označenimi indeksi,
elementi pa so števila. Dobimo jih lahko iz vektorjev z označenimi indeksi
z ukazom as.table
.
Ukaz table(vektor)
pa iz vektorja naredi tabelo zastopanosti
njegovih vrednosti. Le-te sortira po abecedi.
Če želimo vrednosti ali njihov vrstni red predpisati, uporabimo vektor s
predpisanimi vrednostmi, ki ga dobimo z ukazom factor
in nastavitvijo
levels
:
table(factor(vektor, levels=vrednosti))
.
Pri vektorju s predpisanimi vrednosti so le-te vedno nizi. Navaden vektor
dobimo nazaj z ukazom as.vector
. POZOR! Ukaz c
spremeni vrednosti v naravna števila!
Ukaz table(vektor1, vektor2)
naredi dvodimenzionalno kontingenčno tabelo.
Tabele prav tako rišemo z ukazoma plot
in barplot
.
Če je t kontingenčna tabela, ukaza t[ ... ]
in t[[ ... ]]
delujeta podobno kot pri zapisih.
Preglednice so podobne dvodimenzionalnim tabelam – z razliko, da so lahko
stolpci različnih tipov, zato jim bomo tudi tu rekli rubrike. V posamezni rubriki
so bodisi sama števila bodisi sami nizi bodisi same logične vrednosti – tako
kot pri vektorjih.
Preglednice konstruiramo z ukazom data.frame
. Primer:
nasi_mozje <- data.frame(
.
ime=c("Janez", "Franc", "Joze"),
starost=c(35, 42, 55),
zena=c("Marija", "Stefka", "Lojzka"),
st_otrok=c(3, 2, 4)
)
Dostop do posameznih komponent je podoben kot pri matrikah – s tem, da:
$
in [[ ... ]]
.
Imena rubrik tudi tu dobimo in nastavljamo z ukazom names
.
Primer:
nase_zene < nasi_mozje[,c("zena", "starost", "ime", "st_otrok")]
names(nase_zene) <- c("ime", "starost", "moz", "st_otrok")
R je močan programski jezik, ki podpira tudi objektno orientirano programiranje. Pišemo lahko kratke programčke v pozivniku, daljše programe pa lahko shranimo v datoteke.
Samostojne programe, shranjene v datotekah, lahko izvajamo na naslednje načine:
< datoteka
.
V tem primeru mu moramo predpisati še opcijo --save
, --no-save
ali --vanilla
.R -f datoteka
ali R --file datoteka
.Rscript datoteka
.#!/usr/bin/Rscript
.
--slave
.
Morebitne parametre iz ukazne vrstice dobimo z ukazom commandArgs(TRUE)
,
ki vrne vektor iz pripadajočih nizov.
Pomožne programe lahko vključimo v R-ov pozivnik ali drugo programsko kodo z ukazom
source
.
Pregled nad delovnim imenikom (direktorijem):
getwd()
vrne lokacijo imenika, kjer R bere in piše.setwd(imenik)
nastavi lokacijo delovnega.list.files()
vrne vsebino delovnega imenika – kot vektor.
Lahko mu predpišemo obilo nastavitev.Posamezne stavke ločimo s podpičjem ali prehodom v novo vrstico. Slednje lahko storimo tudi znotraj oklepajev ali narekovajev.
Znak #
označuje komentar: vsebina od tega znaka do konca
vrstice se ignorira.
Za splošno izpisovanje uporabimo ukaz cat
.
Če mu podamo več argumentov ali vektor, jih loči s presledkom. To lahko spremenimo
z nastavitvijo sep
. V nasprotju z ukazom print
ukaz sep
ne zaključi vrstice. To dosežemo z nizom
"\n"
. Primer:
cat(1:5, 10, sep=", "); cat("\n")
Zaviti oklepaji { ... }
označujejo blok. Blok je ukaz, ki
zaporedoma izvaja ukaze znotraj zavitih oklepajev in vrne vrednost zadnjega.
Ukaz if(pogoj) izraz1 else izraz2
ali
ifelse(pogoj, izraz1, izraz2)
vrne
izraz1, če je pogoj pravilen, sicer pa izraz2.
Pri prvi konstrukciji lahko del z else
izpustimo. V tem primeru,
če je pogoj napačen, dobimo vrednost NULL
.
Zanke:
for(spremenljivka in vektor) ukaz
zaporedoma izvaja ukaz, pri čemer spremenljivki prireja vrednosti
v vektorju.while(pogoj) ukaz
izvaja ukaz, dokler je pogoj
pravilen.repeat ukaz
ponavlja izvajanje ukaza.break
prekine izvajanje zanke.next
prekine izvajanje tekočega cikla zanke.Funkcije lahko sprejemajo izbirne argumente (opcije), ki jim
predpišemo privzete vrednosti. To storimo v deklaraciji:
function(parametri, opcija1=vrednost1, opcija2=vrednost2 ...)
Primer: Če deklariramo:
f <- function(x, pristej=0) { x*x + pristej }
,
ukaz f(2)
vrne 4
, ukaz f(2, pristej=3)
pa vrne 7
.
Ukaz return(vrednost)
prekine izvajanje
funkcije in vrne predpisano vrednost.
Ukaz library()
vrne seznam knjižnic, ki so na voljo.
Ukaz library(knjižnica)
naloži ustrezno knjižnico.
Včasih želimo kaj izpisati še kako drugače, kot to stori R.
Poleg tega R ne izpisuje avtomatično znotraj zank, ker pač le-te ne
vračajo argumentov. Če želimo to, uporabimo ukaz print
,
ki izpiše vrednost, tako kot bi jo sicer izpisal R (z nekaj dodatnimi
nastavitvami, kot je npr. digits
).
Izpisovanje v osnovni obliki dosežemo z ukazom cat
.
Sprejme več argumentov, ki jih loči s presledkom. Ločitveni niz
lahko spremenimo z nastavitvijo sep
. Primeri:
cat("bla", "ble", "bli")
cat("bla", "ble", "bli", sep="*")
cat("bla", "ble", "bli", "\n")
cat("bla", "ble", "bli", sep="\n")
cat("bla", "ble", "bli", sep="*\n")
POZOR! Če ločitveni niz vsebuje znak za novo vrstico, R slednjega avtomatično doda tudi na konec.
Ukaz paste
deluje podobno kot cat
, le da vrednost
vrne, namesto da bi jo izpisal. Če mu kot argument podamo več nizov,
vrne isto, kot bi izpisal cat
, le da ne upošteva pravila
o novi vrstici.
Ukazu paste
pa lahko posredujemo tudi več vektorjev.
V tem primeru vrne vektor, čigar i-to komponento sestavljajo
vse i-te komponente podanih vektorjev, ločene z nizom, podanim s
sep
. Vektorje cikla.
Če ukazu paste
predpišemo nastavitev collapse=niz
,
iz ustvarjenega vektorja naredi enoten niz, pri čemer komponente loči
s predpisanim nizom. Primer: ukaz
paste(c(1, 2, 3), c(4, 5, 6, 7), sep=" ", collapse="\n")
vrne "1 4\n2 5\n3 6\n1 7"
.
POZOR! Ukaza cat
in paste
se zelo razlikujeta,
če ju kličemo z več vektorji. Drugačna je tudi obravnava določil sep
in collapse
:
cat
združi vektorje v enoten seznam, komponente so ločene z
določilom sep
. Če je prisotno tudi določilo collapse
, ga obravnava
tako, kot da bi bil to element seznama, dodan na konec.
paste
kombinira istoležne komponente vektorjev, tako kot je opisano
zgoraj. Določilo sep
velja za ločevanje med vektorji. Če določilo collapse
ni prisotno, pusti rezultat v vektorski obliki, sicer pa vektor združi v niz, določilo
collapse
pa velja za ločevanje med komponentami.
Ukaz format
je namenjen izpisovanju števil v predpisanem
formatu (denimo na določeno število decimalk), deluje pa tudi za nize.
Podobno kot paste
tudi ukaz format
ne izpisuje,
temveč vrne niz.
Ena od mnogih nastavitev je justify
, ki deluje za poravnavo
nizov (možne vrednosti so "left"
, "right"
,
"centre"
in "none"
). Števila
pa so vedno poravnana desno. Primer: ukaz
format(2/3, trim = TRUE, digits = 3, width = 6, justify = "left")
vrne " 0.667"
, ukaz:
format(format(2/3, digits = 3), width = 6, justify = "left")
pa vrne "0.667 "
.
POZOR!
3.96e-5
).
Za formatiranje števil funkcija format
kliče funkcijo prettyNum
.
Tam se da morda še kaj nastaviti.
Še nekaj ukazov za pisanje:
writeLines
izpiše komponente podanega vektorja kot vrstice.write.table
izpiše preglednico.write.csv
izpiše preglednico v formatu csv.Pregled nad delovnim imenikom (direktorijem):
getwd()
vrne lokacijo imenika, kjer R bere in piše.setwd(imenik)
nastavi lokacijo delovnega.list.files()
vrne vsebino delovnega imenika – kot vektor.
Lahko mu predpišemo obilo nastavitev.
Branje in pisanje navadno izvedemo tako, da ustreznemu ukazu predpišemo
opcijo file
. Če jo nastavimo na niz, to pomeni enkratno
branje oz. pisanje na datoteko z danim imenom.
R pa podpira tudi postopno delo z datotekami. V tem primeru datoteko:
file(datoteka, open = način)
.
Tipične vrednosti načina so "r"
(branje),
"w"
(pisanje) in "a"
(dodajanje).file
vrne kazalec na datoteko, ki ga podajamo pri
opciji file
.close(kazalec)
. cat("blabla", file = "blabla.txt")
bla <- file("blabla.txt", "w")
cat("blabla", file = bla)
close(bla)
.
Osnovni ukazi:
readChar(datoteka, n)
prebere n znakov z datoteke
in vrne prebrani niz.readLines(datoteka)
prebere datoteko in vrne vektor iz njenih
vrstic.scan(datoteka, what = tip)
prebere datoteko in
njeno vsebino interpretira kot seznam elementov predpisanega tipa, recimo
"logical"
, "numeric"
,
"character"
ali "list"
. Rezultat
je vektor.Ukaz read.table
prebere preglednico.
Prva vrstica so glave, elementi v posamezni vrstici so ločeni s presledki,
če imajo nizi presledke, jih damo v narekovaje. Posamezne glave morajo biti
brez presledkov. Če ima npr. datoteka Preglednica.txt
vsebino:
Ime Prva Druga
"Novak Janez" 5 35
Jurak 3 37
ima ukaz:
read.table("Preglednica.txt", header=TRUE)
isti rezultat kot:
data.frame(
.
Ime=factor(c("Novak Janez", "Jurak")),
Prva=factor(c(5, 3))
Druga=factor(c(35,37))
)
Ukaz read.csv
je namenjen branju preglednic v formatu csv
.
Osnovna funkcija je plot(), ki je zelo generična.
Privzeto je, da ta funkcija ustvari novo stran za risanje.
Tako lahko ustvarimo tudi prazno stran – s klicem:
plot(c(xmin, xmax), c(ymin, ymax), type="n", axes=FALSE, ann=FALSE)
Če pa želimo novi element dodati obstoječi strani, damo določilo add=TRUE
.
A to ne deluje vedno, obstajajo pa alternative.
Klic plot(funkcija, spodnja meja, zgornja meja)
nariše graf funkcije.
Če je preveč nalomljen, povečamo določilo n
(privzeta vrednost je n=101
).
Podobno deluje funkcija curve()
, le da lahko namesto funkcije podamo tudi izraz
v spremenljivki x
(ali tudi v drugi spremenljivki, če nastavimo določilo xname
).
Funkciji ali izrazu se posreduje vektor - če torej funkcija vsebuje npr. stavek if,
ne bo delovalo.
Klic plot(vektor koordinat x, vektor koordinat y, pch=znak, type=tip ...)
nariše točke ali grafikon.
Nekaj najuporabnejših tipov:
type | oblika grafikona |
"p" | točke |
"l" | črte |
"b" | točke, povezane s črtami |
"c" | nepovezane črte |
"o" | točke in povezane črte |
"h" | navpičnice z abscisne osi (kot histogram) |
"s" | stopnice – najprej vodoravno, potem navpično |
"S" | stopnice – najprej navpično, potem vodoravno |
"n" | prazno |
Nekaj najuporabnejših znakov:
pch | znak |
0 | votel kvadrat |
1 | votel krog |
2 | votel trikotnik |
3 | plus |
4 | krat |
5 | diamant |
6 | na glavo obrnjen trikotnik |
15 | poln kvadrat |
16 | poln krog |
17 | poln trikotnik |
20 | manjši poln krog |
Določilo add=TRUE
pri tej obliki klica ne deluje, zato je treba dodajanje izvesti drugače.
lahko uporabimo funkcijo lines()
ali points()
.
Besedilo dodamo s funkcijo text().
Datoteko najprej odpremo s klicem ustreznega gonilnika, npr.
postscript(datoteka)
, pdf(datoteka)
,
grDevices::cairo_ps(datoteka)
ali grDevices::cairo_pdf(datoteka)
.
Slednji gonilnik podpira tudi šumnike v UTF-8.
Nato kličemo ustrezne ukaze, npr. plot
.
Nazadnje datoteko zapremo z ukazom dev.off()
.
Porazdelitve v R-u računamo z ukazom:
predpona+porazdelitev(vrednost, parametri)
.
Parametri so opcije ustrezne funkcije, t. j. oblike parameter=vrednost (glej spodaj).
Možne predpone so:
Primer: dbinom(3, size=10, prob=0.4)
vrne P(X=3), kjer je
slučajna spremenljivka X porazdeljena biniomsko Bi(10, 0.4).
Varianta za ‘d’:
dporazdelitev(x, parametri, log=TRUE)
vrne ln P(X = x) oz. ln pX(x).pporazdelitev(x, parametri, lower.tail=FALSE)
vrne
P(X > x).pporazdelitev(x, parametri, log.p=TRUE)
vrne
ln P(X ≤ x).pporazdelitev(x, parametri, lower.tail=FALSE, log.p=TRUE)
vrne
ln P(X > x).Najpogostejše diskretne porazdelitve:
Porazdelitev | R-ovo ime | Parametri |
---|---|---|
binomska | binom |
size, prob |
geometrijska | geom |
prob |
neg. binomska | nbinom |
size, prob |
Poissonova | pois |
lambda |
hipergeometrijska | hyper |
m, n, k |
Interpretacija parametrov pri hipergeometrijski porazdelitvi:
iz posode, v katerih je m belih in n črnih kroglic, na slepo in brez vračanja
izvlečemo k kroglic. Gledamo število belih kroglic med izvlečenimi.
Z drugimi besedami,
dhyper(x, m=m, n=n, k=k)
vrne isto kot
choose(m, x) * choose(n, k-x) / choose(m+n, k)
.
Najpogostejše zvezne porazdelitve:
Porazdelitev | R-ovo ime | Parametri | |
---|---|---|---|
enakomerna | unif |
min, max |
|
normalna | norm |
mean, sd |
|
eksponentna | exp |
rate |
|
gama | gamma |
shape, rate, scale |
|
Cauchyjeva | cauchy |
location, scale |
|
Studentova | t |
df, ncp |
|
Fisherjeva | f |
df1, df2, ncp |
Določeni parametri imajo privzete vrednosti, npr. mean=0
in sd=1
pri normalni porazdelitvi. Prav tako so določeni povezani, npr.
scale
= 1/rate
pri porazdelitvi gama.
Ukaz rporazdelitev(n)
naredi vektor iz n realizacij
slučajne spremenljivke z dano porazdelitvijo.
Recimo funkcija runif
ustreza funkciji rnd
ali
random
iz mnogih programskih jezikov.
Vzorčenju je namenjen ukaz sample:
sample(x)
vrne slučajno permutacijo vektorja x.sample(x, velikost)
vrne vzorec brez ponavljanja ustrezne
velikosti iz x.sample(x, velikost, replace = TRUE)
vrne vzorec iz
x s ponavljanjem.
Dodatna možna nastavitev: prob
za vektor verjetnosti, recimo:
sample(c("a", "e", "i"), 20, replace=TRUE, prob=c(0.2, 0.5, 0.4))
Isto naredi ukaz:
sample(c("a", "e", "i"), 20, replace=TRUE, prob=c(20, 50, 40))
.
Zanima nas verjetnost, da poskus uspe oziroma delež enot v populaciji z dano lastnostjo. To označimo s p. Izvedemo n poskusov, k jih uspe (oziroma vzamemo vzorec n enot in k jih ima iskano lastnost).
Interval zaupanja za p pri stopnji zaupanja β
dobimo z ukazom:
binom.test(k, n, conf.level = β)
.
ali tudi:
binom.test(c(k, n - k), conf.level = β)
.
Hipotezo, da je p = p0, testiramo z ukazom:
binom.test(k, n, p = p0,
alternative = "two.sided" ali "less" ali "greater")
.
Kot rezultat dobimo p-vrednost.
Privzeta vrednost za določilo p
je 0.5
.
Določilo alternative
pove, kaj je alternativna hipoteza:
izbira "two.sided"
ali
"t"
ali izpustitev določila pomeni,
da alternativna hipoteza trdi p ≠ p0.
Izbira "less"
ali
"l"
pomeni,
da alternativna hipoteza trdi p < p0.
Izbira "greater"
ali
"g"
pa pomeni,
da alternativna hipoteza trdi p > p0.
Testiramo ničelno hipotezo, da sta verjetnosti dveh različnih
poskusov oziroma deleža enot z določeno lastnostjo v dveh različnih
populacijah enaka. Označimo ju s p1 in p2.
Izvedemo n1 poskusov prve vrste,
od katerih jih uspe k1, in n2 poskusov
druge vrste, od katerih jih uspe k2. Ekvivalentno,
vzamemo vzorec n1 enot iz prve populacije, izmed katerih
jih ima k1 iskano lastnost, in vzorec n2 enot
iz druge populacije, izmed katerih jih ima k2 našo lastnost.
Test ničelne hipoteze p1 = p2 izvedemo z ukazom:
prop.test(c(k1, k2),
c(n1,n2),
alternative = "two.sided" ali "less" ali "greater")
.
Določilo alternative
pove, kaj je alternativna hipoteza:
izbira "two.sided"
ali
"t"
ali izpustitev določila pomeni,
da alternativna hipoteza trdi p1 ≠ p2.
Izbira "less"
ali
"l"
pomeni,
da alternativna hipoteza trdi p1 < p2.
Izbira "greater"
ali
"g"
pa pomeni,
da alternativna hipoteza trdi p1 > p2.
Testiramo ničelno hipotezo, da so vse verjetnosti več različnih poskusov oziroma vsi deleži enot z določeno lastnostjo v več različnih populacijah enaki. Izvedemo poskuse oziroma iz vsake populacije vzamemo vzorec. Števila vseh poskusov posamezne vrste oziroma velikosti vzorcev iz posamezne populacije naj tvorijo vektor n, števila vseh uspelih poskusov posamezne vrste oziroma števila enot iz posamezne populacije z določeno lastnostjo pa vektor k. Test izvedemo z ukazom:
prop.test(k, n)
.
Zanima nas povprečje spremenljivke na populaciji, kjer privzamemo, da ima
(vsaj približno) normalno porazdelitev. Označimo ga z μ
.
Vzamemo vzorec, vrednosti spremenljivke na vzorcu naj tvorijo vektor v.
Parameter v pa je lahko tudi kontingenčna tabela (recimo dobljena z ukazom
as.table
).
Interval zaupanja za μ
pri stopnji zaupanja β
dobimo z ukazom:
t.test(v, conf.level = β)
.
Hipotezo, da je μ
= μ
0, testiramo z ukazom:
t.test(v, alternative = "two.sided" ali "less" ali "greater",
mu =
.μ
0)
Privzeta vrednost določila mu
je 0
.
Določilo alternative
pove, kaj je alternativna hipoteza:
izbira "two.sided"
ali
"t"
ali izpustitev določila pomeni,
da alternativna hipoteza trdi μ
≠ μ
0.
Izbira "less"
ali
"l"
pomeni,
da alternativna hipoteza trdi μ
< μ
0.
Izbira "greater"
ali
"g"
pa pomeni,
da alternativna hipoteza trdi μ
> μ
0.
Testiramo hipotezo, da ima dana urejenostna (ordinalna) spremenljivka na
populaciji mediano μ
0. To lahko
izvedemo tudi na številskih spremenljivkah namesto T-testa, še posebej,
če so njihove porazdelitve daleč od normalne. Vzamemo vzorec, vrednosti
naše spremenljivke na vzorcu naj tvorijo vektor v. Obravnavali bomo
dva možna testa.
Test z znaki. Pri tem testu je pomembno le, ali je dana vrednost
večja, manjša ali enaka μ
0, zato je
njegova uporaba smiselna pri čistih urejenostnih spremenljivkah, ko
ni določeno, kateri dve vrednosti imata isti odmik od
μ
0 navzgor in navzdol. Test se tako
prevede na testiranje deleža in ga izvedemo z ukazom:
binom.test(sum(sapply(v, function(x) { x > μ0 })),
sum(sapply(v, function(x) { x != μ0 })),
alternative = "two.sided" ali "less" ali "greater")
.
Wilcoxonov test s predznačenimi rangi. Ta test izvedemo, če je določeno, kateri dve vrednosti
imata isti odmik od μ
0. Test izvedemo z ukazom:
wilcox.test(v,
alternative = "two.sided" ali "less" ali "greater")
.
Ta primer se prevede na testiranja povprečja ene same spremenljivke, če obe spremenljivki odštejemo: če je količina tvori vektor v, druga pa vektor w, ukažemo:
t.test(v - w, alternative = "two.sided" ali "less" ali "greater")
.
Isto pa dosežemo tudi z ukazom:
t.test(v, w, paired = TRUE,
alternative = "two.sided" ali "less" ali "greater")
.
Tukaj primerjamo spremenljivki, ki sta bodisi urejenostni ali pa ne moremo privzeti, da sta njuni porazdelitvi blizu normalne. Spet lahko uporabimo bodisi test z znaki bodisi test z rangi. Če sta v in w vektorja podatkov, test z znaki izvedemo z ukazom:
binom.test(sum(mapply(quote(">"), x, y)),
sum(mapply(quote("!="), x, y)),
alternative = "two.sided" ali "less" ali "greater")
.
test z rangi pa izvedemo z ukazom:
wilcox.test(v, w, paired = TRUE,
alternative = "two.sided" ali "less" ali "greater")
.
Testiramo hipotezo, da imata spremenljivki, definirani na različnih populacijah,
enako povprečje, pri čemer privzamemo, da sta vsaj približno normalno porazdeljeni.
Z drugimi besedami, če povprečji označimo z μ
1
in μ
2, ničelna hipoteza trdi, da je
μ
1 = μ
2.
Iz vsake populacije vzamemo vzorec, vrednosti na prvem naj tvorijo vektor
v, vrednosti na drugem pa vektor w. Test izvedemo z ukazom:
t.test(v, w,
alternative = "two.sided" ali "less" ali "greater")
.
t.test(v, w, var.equal = TRUE,
alternative = "two.sided" ali "less" ali "greater")
.
Pomen določila alternative
je tak kot ponavadi:
izbira "two.sided"
ali
"t"
ali izpustitev določila pomeni,
da alternativna hipoteza trdi μ
1 ≠ μ
2.
Izbira "less"
ali
"l"
pomeni,
da alternativna hipoteza trdi μ
1 < μ
2.
Izbira "greater"
ali
"g"
pa pomeni,
da alternativna hipoteza trdi μ
1 > μ
2.
Spet primerjamo spremenljivki, ki sta bodisi urejenostni ali pa ne moremo privzeti, da sta njuni porazdelitvi blizu normalne. Iz vsake populacije vzamemo vzorec, vrednosti na prvem naj tvorijo vektor v, vrednosti na drugem pa vektor w. Hipotezo, da sta spremenljivki enako porazdeljeni, testiramo z ukazom:
wilcox.test(v, w, paired = FALSE,
alternative = "two.sided" ali "less" ali "greater")
.
Določilo alternative
pove, kaj je alternativna hipoteza:
izbira "two.sided"
ali
"t"
ali izpustitev določila pomeni,
da alternativna hipoteza trdi, da sta porazdelitvi različni.
Izbira "less"
ali
"l"
pomeni,
da alternativna hipoteza trdi, da je prva spremenljivka stohastično večja od druge.
Izbira "greater"
ali
"g"
pa pomeni,
da alternativna hipoteza trdi, da je prva spremenljivka stohastično manjša od druge.
Če je eden od vzorcev velik, je računanje zahtevno. Lahko ga poenostavimo
z določilom exact = FALSE
– v tem primeru bo R računal
približek.
Testiramo hipotezo, da imajo spremenljivke, za katere privzamemo, da so porazdeljene normalno, enaka povprečja. Podatke uvrstimo v dva vektorja, denimo v in s. V vektorju v so vse vrednosti, v vektorju s pa skupine (ta vektor torej pove, iz katere populacije je dani podatek). Elementi vektorja s morajo biti nizi, ne števila! Test izvedemo z ukazom:
anova(lm(vr ~ sk, data.frame(vr = v, sk = s)))
.
p-vrednost odčitamo v rubriki Pr(<F)
na desni strani R-ovega poročila.
Ravnamo podobno kot pri analizi variance: podatke uvrstimo v dva vektorja, denimo v in s, pri čemer so v vektorju v vrednosti, v vektorju s pa skupine. Toda pozor: v nasprotju z analizo variance morajo biti tu v vektorju s števila, ne nizi! Test izvedemo z ukazom:
kruskal.test(v, s)
.
Zanima nas koreliranost dveh spremenljivk na isti populaciji. Vzamemo vzorec, vrednosti prve spremenljivke naj tvorijo vektor v, vrednosti druga pa vektor w.
Interval zaupanja za korelacijski koeficient pri stopnji zaupanja β
poiščemo z ukazom:
cor.test(v, w,
method = "pearson" ali "kendall" ali "spearman",
conf.level = β)
.
Določilo method
pove, kateri korelacijski koeficient nas zanima.
Izbira "pearson"
ali "p"
ali opustitev
določila pomeni običajni Pearsonov korelacijski koeficient, ki je primeren za
številske spremenljivke, porazdeljene (približno) normalno.
Izbira "spearman"
ali "s"
pomeni
Spearmanov, izbira "kendall"
ali "k"
pa Kendallov korelacijski koeficient; ta dva sta primerna za urejenostne
spremenljivke. Spearmanov korelacijski koeficient (ρ
) je lažji
za računanje, o Kendallovem koeficientu (τ
) pa dosti statistikov
meni, da je verodostojnejši.
Hipotezo, da sta spremenljivki nekorelirani (oziroma neodvisni) pa testiramo z ukazom:
cor.test(v, w,
method = "pearson" ali "kendall" ali "spearman",
alternative = "two.sided" ali "less" ali "greater")
.
Določilo alternative
pove, kaj je alternativna hipoteza:
izbira "two.sided"
ali
"t"
ali izpustitev določila pomeni,
da alternativna hipoteza trdi, da sta spremenljivki odvisni (oziroma korelirani).
Izbira "less"
ali
"l"
pomeni,
da alternativna hipoteza trdi, da sta spremenljivki pozitivno asociirani (oziroma korelirani).
Izbira "greater"
ali
"g"
pa pomeni,
da alternativna hipoteza trdi, da sta spremenljivki negativno asociirani (oziroma korelirani).
Računanje p-vrednosti za Kendallov korelacijski koeficient je zahtevno
in R sam izbere, kdaj bo računal natančno vrednost in kdaj približek. To lahko
spremenimo z določilom exact = TRUE
ali exact = FALSE
.