Kurzusok
/
R
R
/
Tanterv
/
Vektorfüggvények
Ve

Vektorfüggvények ebben a kurzusban: R

1 feladat

A(z) Vektorfüggvények fogalomról

Ez egy nagy fogalom az R-ben. Hogy eligazodj a lehetőségek között, hasznos lehet megvizsgálni a különböző függvények bemenetének és kimenetének dimenziószámát.

Vektor bemenet, skalár kimenet

Már láttunk olyan függvényeket, amelyek egy vektort kapnak, és egyetlen, skalárszerű értéket adnak vissza:

v <- 1:5
length(v)
#> [1] 5
sum(v)
#> [1] 15

Sok statisztikai függvény is ebbe a kategóriába tartozik, például a mean().

Logikai vektorokhoz ott van az all() és az any(), amelyek egyetlen TRUE vagy FALSE értéket adnak vissza.

Vektor bemenet, vektor kimenet

Az R-ben számos függvény dolgozik teljes vektorokon, és gyakran vektort ad eredményül. Ide tartozik a matematikai függvények többsége:

sq <- c(4, 9, 16, 25)
sqrt(sq) # square root
#> [1] 2 3 4 5

Ez nem csupán tömör és kényelmes, hanem feleslegessé teszi a ciklusok, listakomprehenziók vagy rekurzió használatát is, amelyek más nyelvekben gyakoriak. Az R-ben a vektorfüggvények gyakran sokkal gyorsabbak, mint ezek a technikák.

Valószínűleg sokkal többször használtál már vektorizált függvényeket, mint gondolnád. Hasonlítsd össze ezeket:

v <- c(2, 7, 9)
w <- c(3, 1, 5)
v + w
#> [1]  5  8 14
"+"(v, w)
#> [1]  5  8 14

A jól ismert infix operátorok nem mások, mint a mögöttes vektorizált függvény szintaktikai cukorkái! Ebben az esetben a "+"().

Vektor rendezéséhez ott van a sort(), amely az értékeket adja vissza, és az order(), amely az indexeket:

v <- c("I", "am", "not", "in", "order")
sort(v)
#> [1] "am"    "I"     "in"    "not"   "order"
order(v)
#> [1] 2 1 4 3 5

Alapértelmezés szerint növekvő sorrendben rendez. Ha szükséges, add meg a decreasing = TRUE beállítást, vagy használd a rev() függvényt egy meglévő vektor megfordításához.

v <- c("I", "am", "not", "in", "order")
sort(v, decreasing = TRUE)
#> [1] "order" "not"   "in"    "I"     "am"

rev(1:4)
#> [1] 4 3 2 1

Vannak olyan függvények is, mint a cumsum() és a cumprod(), amelyek kumulatív vektorkimenetet állítanak elő, balról jobbra haladva a bemeneti vektoron:

cumsum(1:5)
#> [1]  1  3  6 10 15  # sums
cumprod(1:5)
#> [1]   1   2   6  24 120 # equivalent to factorials

A fenti példák hasonlítanak a foldl művelethez sok funkcionális nyelvben, azzal a különbséggel, hogy itt a kimenet egy vektor az összes köztes értékkel.

Több vektor bemenet, vektor kimenet

Ennek a fogalomnak a kiterjesztésével vektorokat is össze lehet hasonlítani. Például vegyük a páronkénti maximumot kiszámító pmax() függvényt:

v
#> [1] 2 7 9
w
#> [1] 3 1 5
pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison

Ez a függvény és a hozzá hasonlók is tetszőleges számú bemeneti vektort fogadnak el, nem csak kettőt.

A fenti példa azonos hosszúságú vektorokat használ. Ahogy a Vektorszűrés fogalomnál tárgyaltuk, az R recycling segítségével bővíti ki azokat a vektorokat, amelyek valahogyan „túl rövidek”. Ismételten: használd körültekintően, és lehetőleg csak olyan vektorral, amelynek hossza 1.

pmax(v, 5)
#> [1] 5 7 9

Vektor bemenet, mátrix kimenet

Ez ritkább, de meglehetősen könnyű olyan függvényeket írni, amelyek látszólag skalárt kapnak, és vektort adnak vissza. Ha vektort adsz be nekik, a kimenet egy kétdimenziós matrix (erről egy későbbi fogalomban lesz szó).

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Vektorfüggvények fogalmat