3 . Kapitulua Funtzioak
Rko objektu garrantzitsuenetako batzuk funtzioak dira. Funtzioak datuen gaineko operazio konplexuagoak egiteko erabiliko ditugu. Behin baino gehiagotan erabili beharko ditugun agindu zerrendak enkapsulatzeko balio dute eta behin definituta eta izen bat esleituta, nahi adina aldiz erabili ditzakegu.
3.1 Funtzioen erabilera
Hasteko, garrantzitsua da jakitea Rn iada funtzio asko inplementaturik daudela. Beraz, askotan, behar dugun funtzioa bilatu eta erabiltzea izango da gure lan bakarra.
Rko funtzio bat erabiltzeko, funtzioaren izena erabiliko dugu, eta parentesi artean, funtzio horri dagozkion parametro edo argumentuen balioak definitu beharko ditugu. Ohartu argumentu hauek Rko edozein motako objektuak izan daitezkeela. Adibidez, abs
funtzioak, bektore numeriko edo matrize bat hartzen du argumentu bezala eta bertako elementuen balio absolutuak itzultzen ditu:
x <- c(-5:12)
x
## [1] -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12
abs(x)
## [1] 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 10 11 12
Funtzio batzuk, aurrekoak kasu, argumentu bakarra jasotzen dute eta aldiz, beste batzuetan argumentu bat baina gehiago definitu beharko ditugu. Adibidez, seq
funtzioak sekuentzia erregularrak sortzeko balio du eta hiru argumentu hartzen ditu: sekuentziaren hasierako balio, sekuentziaren bukaerako balioa eta zenbakien arteko tartea:
seq(from=1, to=10, by=2)
## [1] 1 3 5 7 9
Erabili nahi ditugun funtzioak parametro asko dituztenean do.call
funtzioa oso lagungarria izan daiteke. Parametroak zerrenda batean definituz gero, ondoren, do.call
funtzioa honela erabil dezakegu era honetan:
args <- list()
args$from <- 1
args$to <- 10
args$by <- 2
do.call(what=seq, args=args)
## [1] 1 3 5 7 9
Exekuzioa berdina da zuzenean edo do.call
funtzioa erabiliz, baina hainbat kasutan azken hurbilketarekin kodearen antolaketa txukunagoa izango da. Gainera, parametroen zerrenda hau beste funtzio batekin ere berrerabili dezakegu.
Azkenik, ohartu, ez dela beharrezkoa argumentuen izena funtzioaren deian beti idaztea:
seq(1, 10, 2)
## [1] 1 3 5 7 9
Argumentuen izenak idatzi nahi ez baditugu, kontuz ibili beharko gara argumentuen ordena zehazterakoan; erabiltzen ari garen funtzioak, bere definizioan, finkatuta daukan argumentuen ordenera egokitu beharko gara. Izan ere, ordena aldatu ezkero, ez dugu nahi dugun emaitza lortuko:
seq(2, 10, 1)
## [1] 2 3 4 5 6 7 8 9 10
seq(1, 10, 2)
## [1] 1 3 5 7 9
Funtzio baten argumentuak zeintzuk diren eta zein ordenetan definituta dauden nola ikusi, hurrengo bi ataletan ikasiko dugu.
3.2 Paketeak
Rren ezaugarririk interesgarriena hedagarritasuna da; edonork gara ditzake funtzionalitate berriak dakartzaten paketeak. Beraz, Rko funtzio ezberdinak pakete desberdinetan daude eskuragai.
Rn paketeak instalatzeko bide ofiziala CRAN biltegiaren bitartez da –Comprehensive R Archive Network–. Bertan milaka pakete daude gordeta.6
Biltegi horretan dauden paketeak install.packages
aginduarekin instala daitezke. Esate baterako, estatistiko batzuk kalkulatzeko beharko dugun fBasics paketea instalatzeko, ondokoa idatzi behar da R terminalean:
install.packages("fBasics")
CRAN biltegiaz gain, badago oso hedatua dagoen beste bat: Bioconductor –http://bioconductor.org–. Biltegi horretan, bioinformatika arloan garatutako paketeak aurki daitezke gehien bat. Hala ere, pakete orokorrak ere aurki ditzakegu. Bioconductor biltegiaren kasuan paketeen instalazioa pixka bat ezberdina da. Adibidez reshape2 paketea instalatzeko7 adibidez, ondoko kodea exekutatu behar da R terminalean.
source("http://bioconductor.org/biocLite.R")
biocLite("reshape2")
Paketeen instalazioa behin bakarrik egin behar dugu ordenagailu bakoitzean. Hala ere, Rko saio berri bat hasten dugun bakoitzean behar ditugun paketeak kargatu beharko ditugu, hauek erabili ahal izateko. Horretarako library
funtzioa erabiliko dugu:
library(fBasics)
3.3 R ren laguntza
Rren funtzio guztiak ezagutu eta haiek erabiltzen jakitea ezinezkoa da, izan ere milaka funtzio daude iada eskuragai eta paketeak denborarekin aldatzen dira, funtzio berriak sortuz, zaharrak ezabatuz, etab.
Beraz, Rko funtzio eta paketeei buruzko informazioa lortzeko Rren laguntza erabili beharko dugu. Horretarako, hainbat bide daude. Erabili nahi dugun funtzioaren izena zehazki ezagutzen badugu, honakoa idatziko dugu Rren terminalean:
help("funtzioaren izena")
Honek zuzenean aukeratutako funtzioaren laguntza orria zabalduko digu, RStudion bagaude eskuineko beheko leihoan eta bestela internet nabigatzailean. Honakoak ere efektu berdina izango du:
?funtzioaren izena
Defektuz, help
funtzioak kargatuta dauden paketeetako funtzioen artean egingo du bilaketa. Kargatuta ez daukagun paketeren bateko funtzio baten laguntza behar badugu try.all.packages = TRUE
argumentua gehitu beharko dugu help
funtzioaren deian:
help("funtzioaren izena", try.all.packages = TRUE)
Funtzioaren izena ez badugu zehazki ezagutzen, help.search()
edo ??
erabili ditzakegu, argumentu bezala, bilatu nahi dugunarekin erlazioa duen espresio bat jarriz:
??variance
Hau eginda, bilaketa bat egingo da eta erlazionatuta dauden funtzio, objektu eta pakete guztien zerrenda itzuliko digu Rk. Ondoren, guk, behar duguna aukeratu beharko dugu hau guztiaren artean eta berriro ere laguntza orri batera iritsiko gara.
Rko laguntza orri guztiek egitura berdina dute, honako atal hauetaz osatuta:
- Description: Hautatutako funtzioak zer egiten duen azaltzen duen lerro pare bat.
- Usage: Funtzioari dei nola egin diezaiokegun adierazten da, kodea erabiliz.
- Arguments: Funtzioari zein sarrera argumentu eman behar dizkiogun adierazten da eta haien ordena, bakoitzean zein motako argumentua den azalduz eta defektuzko baliorik duen ala ez zehaztuz. Defektuzko baliorik ez duten argumentuei nahi eta nahiez eman beharko diegu balio bat.
- Details: Funtzioari buruzko azalpen luzeago bat ematen da, xehetasun garrantzitsu batzuk emanez.
- Value: Funtzioak irteeran zein balio itzultzen dituen adierazten digu, zer informazio gordetzen duten itzulitako objektuak eta zein motakoak diren adieraziz.
- References: Funtzioarekin edo bere inplementazioarekin erlazionatutako erreferentzia bibliografikoak aurkezten dira.
- See Also: Hautatutako funtzioarekin erlazionatutako Rko beste funtzio batzuen zerrenda bat.
- Examples: Funtzioaren erabileraren adibide batzuk eskeitzen dira.
Guretzako atal garrantzitsuenak Description, Usage, Arguments eta Examples izango dira.
Rren laguntza oso erabilgarria eta lagungarria da, beraz hau ondo erabiltzen jakitea ezinbestekoa da. Gainera, interneten ere informazio ugari dago Rko funtzio eta pakete ezberdinen inguruan. Gogoratu, bai laguntza eta bai interneteko bilaketak egitean ingelesa erabiliz emaitza askoz gehiago eta erabilgarriagoak lortuko ditugula.
3.4 Ohiko funtzioak
Honako taula honetan Rko ohiko funtzio batzuen laburpena egingo dugu.
Funtzioa | Funtzionalitatea |
---|---|
rm | Objektuak ezabatzeko |
ls | Definituta dauden objektu guztien zerrenda itzultzen du |
paste | Bi bektore kateatzen ditu eta karaktere bihurtzen ditu. |
log, log10, log2 | Oinarri ezberdinetako logaritmoak |
exp | Funtzio esponentziala |
sqrt | Erro karratua |
cos, sin, tan, acos, asin, atan | Funtzio trigonometriko ohikoak |
seq | Sekuentzia erregularrak sortzeko |
rep | Balio bat hainbat aldiz errepikatuz, bektore bat sortzeko |
table | Maiztasun taula edo kontingentzia taulak sortzeko |
length | Bektore edo zerrenda baten luzera ezagutzeko |
dim | Objektuen dimentsioa ezagutzeko (matrizeak, data frame-ak eta array-ak) |
is, mode | Objektu baten mota jakiteko |
as.numeric, as.character, as.factor | Mota batetik bestera castinga egiteko. |
na.omit | Bektore batean agertzen diren NA balioak ezabatzeko |
unique | Bektore bateko errepikatzen ez diren elementuak lortzeko |
append | Bektore bati balioak eransteko |
rev | Bektore bati buelta emateko, elementuak atzekoz aurrera ordenatuz |
sort | Bektore bateko elementuak ordenatzeko |
order | Bektore bateko elementuen ordena itzultzen digu, txikienaren indizea lehenengo eta handienaren indizea azkena jarriz. |
sign | Bektore bateko elementuen zeinuak itzultzen ditu |
floor, ceiling, round, signif, trunc | Borobiltzeko funtzioak |
max | Bektore batean balio maximoa |
min | Bektore batean balio minimoa |
sum | Bektore bateko elementuen batura egiteko. |
cut | Aldagai jarraitu bat tarteetan biltzeko. |
which | Bektore edo matrize batean aukeratutako baldintzak betetzen dituzten balioen indizeak itzultzen ditu |
which.max, which.min | Bektore batean balio maximoaren edo minimoaren indizea itzultzen du. |
cbind | Data frame (edo matrize) bati zutabeak gehitzeko |
rbind | Data frame (edo matrize) bati errenkadak gehitzeko |
t | Matrize baten transposatua. |
diag | Matrize baten diagonala atzitzeko edo matrize diagonal bat sortzeko |
subset | Bektore, matrize edo data frame batean, definitutako baldintzak betetzen dituzten indibiduoak aukeratzeko |
rowMeans | Matrize edo data frame baten errenkaden batezbestekoak kalkulatzeko. |
rowSums | Matrize edo data frame baten errenkaden batukariak kalkulatzeko. |
colMeans | Matrize edo data frame baten zutabeen batezbestekoak kalkulatzeko. |
colSums | Matrize edo data frame baten zutabeen baturak kalkulatzeko. |
summary | Data frame baten aldagai guztien edo aldagai konkretu baten estatistiko garrantzitsuenen laburpen bat |
cumsum | Bektore batean batuketa metakorrak egiten ditu. |
cumprod | Bektore batean biderkaketa metakorrak egiten ditu. |
Funtzio guzti hauen erabilera hobeto ezagutu nahi badugu eta zenbait adibide ikusi nahi baditugu, R ren laguntzara jo dezakegu aurreko atalean azaldu bezala.
3.4.1 Estatistikoak kalkulatzeko funtzioak
Bereziki, goian aipatutako funtzioez gain, oinarrizko estatistikoak kalkulatzeko honako funtzio hauek erabili ditzakegu:
Funtzioa | Funtzionalitatea |
---|---|
mean | Batezbestekoa |
var | Kuasibariantza |
sd | Kuasi desbiderapen estandarra |
median | Mediana |
quantile | Pertzentil, kuantil eta dezilak |
range | Heina |
skewness | Asimetria koefizientea (timeDate paketean) |
kurtosis | Kurtosia (timeDate paketean) |
ineq | Gini-ren indizea (ineq paketean) |
Lc | Lorenz-en kurba irudikatzeko (ineq paketean) |
Beste zenbait estatistiko, adibidez moda, bariantza, desbiderapen estandarra eta alborapena, hauei aurreko gaietan ikasi ditugun eragiketak eta transformazioak aplikatuta eta funtzio berriak sortuz lor ditzakegu, hurrengo atalean azalduko dugun moduan.
Adibidez, Rn aurki dezakegun iris
datu baseko Sepal.Width
aldagaiaren estatistiko batzuk kalkulatu ditzakegu:
library(timeDate)
library(ineq)
mean(iris$Sepal.Width)
## [1] 3.057333
quantile(iris$Sepal.Width)
## 0% 25% 50% 75% 100%
## 2.0 2.8 3.0 3.3 4.4
skewness(iris$Sepal.Width)
## [1] 0.3126147
## attr(,"method")
## [1] "moment"
ineq(iris$Sepal.Width)
## [1] 0.07915104
Lorenz <- Lc(iris$Sepal.Width, plot=TRUE)
Ohartu, aurreko kodea exekutatu ahal izateko timeDate
eta ineq
paketeak instalatuta izan behar direla.
Azkenik, aldagai jarraitu baten estatistikoak beste aldagai baten arabera kalkulatzeko aggregate
funtzioa erabil dezakegu. Adibidez, honako kodeak Sepal.Width
aldagaiaren asimetria koefizientea kalkulatzen du, Species
aldagaiaren arabera.
aggregate(iris$Sepal.Width, by=list(iris$Species), FUN=skewness)
## Group.1 x
## 1 setosa 0.03872946
## 2 versicolor -0.34136443
## 3 virginica 0.34428489
3.5 Funtzio berriak sortzea
Rko funtzioak erabiltzeaz gain, behar denean, guk ere geure funtzio propioak definitu eta eraiki ditzakegu. Funtzioak sortzeko function
funtzioa erabiltzen da era honetan:
funtzioaren.izena <- function(argumentuak){
Aginduak
return(objektua)
}
Adibidez, hurrengo adibidean cm-tan neurturako pertsonen altueren bektore bat metrotara pasatzen dugu:
conversion1 <- function(x){
x/100
}
x <- c(165, 170, 155)
conversion1(x)
## [1] 1.65 1.70 1.55
Funtzioek, implementatzen duten azken aginduaren emaitza itzultzen dute. Edonola ere, nahi izanez gero, return
agindua erabili daiteke, funtzioaren emaitza esplizituki adierazteko.
conversion1 <- function(x){
return(x/100)
}
Ohartu, funtzioak sortzean bere argumentuak erazagutu edo definitu behar direla. Hauek izen bat izan behar dute eta balio lehenetsi (defektuzko balio) bat ere izan dezakete, nahi badugu. Adibidez, jarraian definituko dugun funtzioak cm-tan dagoen bektore bat metrotara pasako du, baina gainera, emaitzaren digitu dezimal konpurua kontrolatu ahalko dugu digituak
izeneko argumentu baten bidez:
conversion2 <- function(x, digituak=1){
m <- x/100
round(m, digits=digituak)
}
x <- c(165, 170, 155)
conversion2(x)
## [1] 1.6 1.7 1.6
conversion2(x, digituak=2)
## [1] 1.65 1.70 1.55
Balio lehenetsirik ez duten parametroei, x
kasu honetan, derrigorrez eman behar zaie balio bat funtzioa erabiltzean. Argumentu horiei balioa eman ezean, interpreteak errore bat jaurtizen du. Aldiz, balio lehenetsia daukaten parametroak ez ditugu zertan definitu, baliorik esleitu ezean Rk defektuzko balioa erabiliko baitu. Gainera, ohartu, funtzio baten barnean, beste funtzioei deitu diezaiekegula: kasu honetan round
funtzioa erabili dugu zenbaki erreal bat borobiltzeko balio duena.
3.6 Ariketak
1. Ariketa Erabili laguntza sample
funtzioa ezagutzeko. Zein parametro hartzen ditu sarreran? Hauetako baten batek ba al du defektuko baliorik? Zein balio itzultzen ditu? Zein motakoak dira objektu hauek? Sortu adibide bat, laguntza orrian agertzen denaren ezberdina, funtzio honen erabilera erakusteko.
2. Ariketa Jarraitu honako pausuak, bakoitzean soilik funtzio bat erabiliz:
- Definitu ezazu \(x=(5, 4, 3, 2, 1)\) bektorea
seq
funtzioa erabiliz. - Ordenatu \(x\) bektorea balio txikienetik handienera eta gorde
y
izeneko aldagaian. - Gehitu
y
bektoreari 2 eta 4 balioak bukaeran. - Aukeratu
y
bektorean errepikatzen ez diren elementuak eta gordez
bektorean.
3. Ariketa Kalkulatu honakoa \(\sum_{i=10}^{100} (i^2+4i^5)\).
4. Ariketa Kalkulatu \(x=(1,4,2,4,6,1)\) bektorearen batezbestekoa 2 modu ezberdinetan:
- R n iada definituta dagoen funtzio bat erabiliz.
- Zuk definitutako funtzio bat erabiliz (OHARRA: Kontuan izan, bektoreak balio galduak baditu, hauek batezbestekoa kalkulatu aurretik kendu beharko ditugula. ).
5. Ariketa Definitu funtzio bat, bektore baten desbiderapen estandarra (\(s_n\)) kalkulatuko duena eta erabili funtzio hau \(x=(9,8,1,3,5,1,3,5,1,4)\) bektorearen desbiderapen estandarra kalkulatzeko. (OHARRA: Kontuan izan, bektoreak balio galduak baditu, hauek batezbestekoa kalkulatu aurretik kendu beharko ditugula. )
6. Ariketa Egin aurreko ariketa berriro, horretarako Rn definitutako sd
funtzioak itzulitako baliotik abiatuz. (OHARRA: Kontuan izan, bektoreak balio galduak baditu, hauek batezbestekoa kalkulatu aurretik kendu beharko ditugula. )
7. Ariketa Definitu datu bektore baten taula estatistikoa eraiki eta itzultzen duen funtzio bat, \(x_i\), \(f_i\), \(F_i\), \(h_i\) eta \(H_i\) zutabeak dituena. Horretarako, goian azaldutako ohiko funtzio batzuetaz baliatu beharko zarete. Ondoren, erabili funtzio hori \(x=(9,8,1,3,5,1,3,5,1,4)\) laginaren taula lortzeko.
8. Ariketa Sortu bektore baten moda kalkulatuko duen funtzio bat eta, hau erabiliz, alborapena kalkulatuko duen beste funtzio bat. Kalkulatu funtzio hauek erabiliz \(x=(9,8,1,3,5,1,3,5,1,4)\) laginaren moda eta alborapena.
9. Ariketa iris
datu basea Rn berez dagoen data frame bat da. Berau erabiliz egin honako ariketak:
- Aztertu zein motakoak diren aldagai guztiak
is
funtzioa erabiliz. - Kalkulatu aldagai jarraitu guztien batezbestekoak Rko agindu bakar bat erabiliz.
- Kalkulatu Petal.Width izeneko aldagaiaren batezbesteko geometrikoa.
- Sortu aldagai berri bat Petal.Width2 izenekoa, aldagai hau tarteetan banatzen duena eta kualitatibo bihurtzen duena (OHARRA: erabili
cut
funtzioa).
Zerrenda osoa http://cran.r-project.org/web/packages/index.html helbidean dago.↩
Datu egiturak maneiatzeko eta eraldatzeko erabili daiteke pakete hau.↩