• Nem Talált Eredményt

2015.febru´ar26.´esm´arcius5. CsimaJudit F¨uggv´enyek

N/A
N/A
Protected

Academic year: 2022

Ossza meg "2015.febru´ar26.´esm´arcius5. CsimaJudit F¨uggv´enyek"

Copied!
21
0
0

Teljes szövegt

(1)

F¨ uggv´ enyek

Csima Judit

BME, VIK,

Sz´am´ıt´astudom´anyi ´es Inform´aci´oelm´eleti Tansz´ek

2015. febru´ar 26. ´es m´arcius 5.

(2)

uggv´enyek

F¨ uggv´ enydefin´ıci´ o

function()paranccsal lehet l´etrehozni ˝oket, a l´etrehozott objektum t´ıpusa function

f <- function(<arguments>) {

## Do something interesting }

megadhatunk default ´ert´ekeket

> f <- function(p1, p2 = 2){p1*(p2-17)}

> f(2) [1] -30

> f(2,17) [1] 0

(3)

uggv´enyek

Ert´ ´ ekad´ as az argumentumoknak

Lehet poz´ıci´o vagy n´ev szerint.

Az al´abbiak mind ugyanazt csinalj´ak:

> head(airquality, 2)

> head(x = airquality, n = 2)

> head(n = 2, x = airquality)

> head(n = 2, airquality)

A head f¨uggv´eny argumentumai: head(x, n = 6L, ...)

(4)

uggv´enyek

F¨ uggv´ enyekr˝ ol

A f¨uggv´enyeket lehet egym´asba ´agyazni

Egy f¨uggv´eny ´altal visszaadott ´ert´ek az utols´o kisz´amolt kifejez´es

´ ert´eke

> f <- function(p1, p2 = 2){

+ e1 <- p1*(p2-17) + 2*e1

+ + }

> f(2) [1] -60

(5)

uggv´enyek

Egym´ asba ´ agyazott f¨ uggv´ enyek

function1 = function(p1){p1*p1}

function2 = function(p2){p2 * function1(p2)}

ha function1-et ´at´ırom (de semmi m´ast nem csin´alok, pl. nem ford´ıtom le), att´ol m´eg function2 h´ıv´asakor a r´egi function1 fog behelyettes´ıt˝odni

ez elker¨ulhet˝o: source

(6)

Kontroll-strukt´ur´ak

Kontroll-strukt´ ur´ ak

A kontroll-strukt´ur´akkal belesz´olhatunk abba, hogy hogyan fusson le a program (f¨uggv´eny), melyik utas´ıt´asok hajt´odjanak v´egre.

if, else: felt´etel ellen˝orz´ese

for: ciklus v´egrehajt´asa el˝ore defini´alt sz´amszor while: ciklus v´egrehajt´asa, am´ıg vmi felt´etel igaz repeat: ciklus v´egrehajt´asa v´egtelen sokszor break: ciklus megszak´ıt´asa

Ezeket nem interakt´ıvan haszn´aljuk ´altal´aban, hanem akkor, amikor

¨

osszetettebb f¨uggv´enyt ´ırunk

(7)

Kontroll-strukt´ur´ak

If-else

if(<condition>) {

## do something } else {

## do something else }

if(<condition1>) {

## do something } else if(<condition2>) {

## do something different } else {

## do something different }

(8)

Kontroll-strukt´ur´ak

Term´eszetesen azelse r´esz lehet ¨ures is (elmaradhat):

if(<condition1>) {

valami t¨ort´enik }

if(<condition2>) {

valami m´as t¨ort´enik }

(9)

Kontroll-strukt´ur´ak

A forciklus egy v´altoz´ohoz sorban hozz´arendeli egy adott vektorb´ol vett

´

ert´ekeket ´es minden egyes ´ert´ekre lefuttatja a ciklust:

for(i in 1:10) { print(i)

}

(10)

Mindenf´ele apply-ok

apply-ok

Ciklusokat haszn´alhatunk interakt´ıvan ill. egysoros parancsk´ent is:

apply-ok

A leggyakoribbak:

lapply: Egy lista minden elem´ere lefuttatja ugyanazt a f¨uggv´enyt sapply: Uaz, mint azlapply, csak pr´ob´alja egyszer˝ubben ki´ırni az eredm´enyt

apply: egy t¨obbdimenzi´os objektum (m´atrix vagy data frame) soraira ill. oszlopaira futtatunk le vmit

mapply: t¨obb argumentum´u f¨uggv´enyt futtat le ´ugy, hogy az argumentumok t¨obb list´ab´ol j¨onnek

Nagyon hasznos m´eg (´alt. lapplyel˝ott): split Vannak m´eg m´as apply-ok is.

(11)

Mindenf´ele apply-ok

lapply

K´et k¨otelez˝o argumentuma van: X = milyen list´ara, FUN = milyen f¨uggv´enyt futtasson le.

> l <- list(1:5, rnorm(5))

> lapply(l, mean) [[1]]

[1] 3 [[2]]

[1] -0.9900133

(12)

Mindenf´ele apply-ok

Lehet tov´abbi argumentum, ha a FUN f¨uggv´enynek sz¨uks´ege van r´a.

> lapply(1:3, rnorm, 10, 1) [[1]]

[1] 12.67631 [[2]]

[1] 9.622761 10.824292 [[3]]

[1] 8.534720 9.355985 7.674501

(13)

Mindenf´ele apply-ok

> l <- lapply(1:3, rnorm, 10, 1)

> lapply(l, mean) [[1]]

[1] 11.60651 [[2]]

[1] 9.510879 [[3]]

[1] 9.566127

Lehetne ezt egyszer˝ubben is ´ırni....

(14)

Mindenf´ele apply-ok

sapply

az lapply mindig list´at ad visza, az sapply megpr´ob´alja egyszer˝us´ıteni az eredm´enyt:

ha az eredm´eny egy lista, aminek minden eleme 1 hossz´us´ag´u, akkor vektort ad vissza

ha az eredm´eny egy lista, aminek minden eleme egy azonos hossz´us´ag´u (> 1) vektor, akkor m´atrixot ad vissza

egy´ebk´ent uazt adja vissza, mint lapply (list´at)

(15)

Mindenf´ele apply-ok

> sapply(l, mean)

[1] 11.60651 9.510879 9.566127

A sima mean nem megy:

> mean(l) [1] NA

Warning message:

In mean.default(l) : argument is not numeric or logical:

returning NA

(16)

Mindenf´ele apply-ok

Lehet a f¨uggv´enyt az l/sapply-on bel¨ul defini´alni:

> lapply(1:3, function(n) n*n) [[1]]

[1] 1 [[2]]

[1] 4 [[3]]

[1] 9

> sapply(1:3, function(n) n*n) [1] 1 4 9

(17)

Mindenf´ele apply-ok

Split data frame-re

Valamelyik oszlop ´ert´ekei szerint sz´etv´agja a data frame-et csoportokra, eredm´eny egy lista:

> l<- split(airquality, airquality$Month)

> class(l) [1] "list"

> length(l) [1] 5

(18)

Mindenf´ele apply-ok

> sapply(l, function(x) colMeans(x[ ,c(1,2)], na.rm=TRUE))

5 6 7 8 9

Ozone 23.61538 29.44444 59.11538 59.96154 31.44828 Solar.R 181.29630 190.16667 216.48387 171.85714 167.43333

Ez egy sorban ugyanaz, mintha azt ´ırtam volna:

> colm <- function(x){ colMeans(x[ ,c(1,2)], na.rm=TRUE)}

> sapply(l, colm)

(19)

Mindenf´ele apply-ok

apply

Kisz´amol egy f¨uggv´enyt egy m´atrix vagy data frame minden sor´ara ill.

oszlop´ara

Argumentumai: X = t¨obbdimenzi´os objektum, MARGIN= melyik dimenzi´o szerint kell sz´amolni (1/2), FUN= mit kell csin´alni, ´es m´eg esetleg egy´eb argumentumok, ha az kell a FUN f¨uggv´enynek.

> x <- matrix(rnorm(200), 20, 10)

> apply(x, 2, mean)

[1] 0.04868268 0.35743615 -0.09104379 [4] -0.05381370 -0.16552070 -0.18192493 [7] 0.10285727 0.36519270 0.14898850 [10] 0.26767260

(20)

Mindenf´ele apply-ok

a kor´abban m´at l´atott colMeans (´es t´arsai) igaz´ab´ol r¨ovid´ıt´esek:

rowSum = apply(x, 1, sum) rowMeans = apply(x, 1, mean) colSum = apply(x, 2, sum) colMeans = apply(x, 2, mean)

(21)

Mindenf´ele apply-ok

mapply

T¨obb argumentummal rendelkez˝o f¨uggv´enyekre apply:

> mapply(function(x,y,z) rnorm(x,y,z), 1:3, 3:5, 1:3) [[1]]

[1] 3.540355 [[2]]

[1] 2.931486 2.437551 [[3]]

[1] 6.3667617 7.0573508 -0.4421403

Ez uaz, mint az mapply(rnorm, 1:3, 3:5, 1:3)

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Folytonos Reinhardt-tartom´ anyr´ ol minden holomorf f¨ uggv´ eny ki- terjeszhet˝ o holomorf m´ odon a tartom´ any logaritmikusan konvex burk´ ara.. Teh´ at, ha a sejt´ es

Az eml´ıtett (CD, CES) termel´esi f¨uggv´enyek v´altoz´oi pozit´ıv sz´amok, a f¨uggv´enyek maguk pedig folytonosak ´es minden v´altoz´ojukban szigor´uan monotonak. A

6.9. Igazoljuk, hogy X v´ eletlen v´ altoz´ o karakterisztikus f¨ uggv´ enye pontosan akkor val´ os, ha X eloszl´ asa szimmetrikus.. Igazoljuk, hogy ϕ egy konstans v´ eletlen

NEMLINE ´ ARIS RENDSZEREK 40 Megfelel˝ oen v´ alasztott Ljapunov-f¨ uggv´ eny seg´ıts´ eg´ evel hat´ arozzuk meg az orig´ o, mint egyens´ ulyi pont t´ıpus´ at az al´ abbi

A jegyzet hatodik fejezet´ eben t´ er¨ unk r´ a a sima fel¨ uletek g¨ orb¨ uleti jellemz´ es´ ere, amely- hez m´ ar a le´ır´ o vektorf¨ uggv´ enyek m´ asodrend˝ u

feladatokban sz´ am´ıtsuk ki az egyes parci´ alis deriv´ altakat, ahol az egyszer˝ us´ eg kedv´ e´ ert a megfelel˝ o f¨ uggv´ enyek helyett azok hozz´ arendel´ esi szab´

Megjegyzend˝o, hogy ez az MP part´ıci´o, az MCPT filoz´ofi´aj´at´ol elt´er˝oen, a k¨ozel´ıt´es egyes pontjain kihaszn´alja a gemin´al szorzat referencia

adott f˝ ut˝ oteljes´ıtm´ eny mellett mekkora optikai teljes´ıtm´ enyt produk´ al a detektorokon (FCS ka- libr´ aci´ o). B´ ar az Spitzer- ´ es a Herschel-˝ urt´ avcs¨ ovek