Toiminnot R-ohjelmoinnissa esimerkin avulla

โšก ร„lykรคs yhteenveto

R-funktiot pakkaavat joukon ohjeita yhden nimen alle, joten toistuva tehtรคvรค suoritetaan yhdellรค kutsulla. Sisรครคnrakennetut matematiikka- ja tilastoapuohjelmat, kรคyttรคjรคn mรครคrittรคmรคt funktiot, ympรคristรถn scoping, ja ehdollisia argumentteja kรคsitellรครคn tรคssรค esimerkkien avulla.

  • ๐Ÿ”˜ Toiminnan anatomia: Funktio yhdistรครค nimen, valinnaisen argumenttiluettelon, rungon ja valinnaisen paluuarvon.
  • ๐Ÿงฎ Sisรครคnrakennettu kattavuus: R sisรคltรครค yleisiรค apufunktioita, kuten diff() ja length() matemaattisten ja tilastollisten funktioiden rinnalla.
  • ๐Ÿ“ Uudelleenkรคytettรคvรค skaalaus: normalize()-funktio muuttaa kopioi-ja-liitรค-skaalauslohkon yhdeksi uudelleenkรคytettรคvรคksi kutsuksi.
  • ๐Ÿงญ Ympรคristรถsรครคnnรถt: Jokainen kutsu avaa paikallisen ympรคristรถn, ja R ratkaisee nimen sisimmรคstรค mรครคritelmรคstรค ulospรคin.
  • ๐Ÿงช Ehdollinen logiikka: split_data()-funktion sisรคllรค oleva if/else-haara palauttaa joko harjoitusjoukon tai testijoukon.
  • ๐Ÿ› ๏ธ Nimeรคmiskรคytรคntรถ: Kรคyttรคjรคn mรครคrittรคmรคn funktion nimeรคminen eri tavalla kuin sisรครคnrakennetun funktion nimeรคminen estรครค peittรคmisen ja hรคmmentรคvรคt virheet.

Toiminnot R-ohjelmoinnissa

Mikรค on funktio R:ssรค?

A toiminto, ohjelmointiympรคristรถssรค, on joukko ohjeita. Ohjelmoija rakentaa funktion, jota vรคltetรครคn saman tehtรคvรคn toistaminentai vรคhentรครค monimutkaisuus.

Toiminnon pitรคisi olla

  • kirjoitettu tietyn tehtรคvรคn suorittamiseksi
  • voi sisรคltรครค argumentteja tai ei
  • sisรคltรครค ruumiin
  • voi palauttaa tai olla palauttamatta yhden tai useamman arvon.

Yleinen lรคhestymistapa funktioon on kรคyttรครค argumenttiosaa as tuloa, Ruoki elin osa ja lopuksi palauta an ulostulo. Funktion syntaksi on seuraava:

function (arglist)  {
  #Function body
}

R tรคrkeitรค sisรครคnrakennettuja toimintoja

R:ssรค on paljon sisรครคnrakennettuja toimintoja. R sovittaa syรถteparametrisi funktion argumentteineen joko arvon tai sijainnin mukaan ja suorittaa sitten funktion rungon. Funktioargumenteilla voi olla oletusarvoja: jos et mรครคritรค nรคitรค argumentteja, R ottaa oletusarvon.
Huomautuksia:
On mahdollista nรคhdรค funktion lรคhdekoodi ajamalla itse funktion nimi konsolissa.

Typing Hakasulkeista riippumaton funktion nimi tulostaa lรคhdekoodin, kuten alla oleva konsoli osoittaa.

R-konsoli tulostaa sisรครคnrakennetun funktion lรคhdekoodin

Nรคemme kolme toimintoryhmรครค toiminnassa

  • Yleinen toiminto
  • Matemaattinen funktio
  • Tilastollinen funktio

Yleiset toiminnot

Tunnemme jo yleiset funktiot, kuten cbind(), rbind() ja range(), jรคrjestellรค(), ja order(). Jokaisella nรคistรค funktioista on tietty tehtรคvรค, ja ne ottavat argumentteja tulosteen palauttamiseksi. Seuraavat ovat tรคrkeitรค funktioita, jotka on tiedettรคvรค -

diff()-funktio

Jos tyรถskentelet Aikasarja, sinun on pysรคytettรคvรค sarja ottamalla niiden viivearvot. kiinteรค prosessi sallii vakion keskiarvon, varianssin ja autokorrelaation ajan kuluessa. Tรคmรค parantaa pรครคasiassa aikasarjan ennustamista. Tรคmรค voidaan tehdรค diff()-funktiolla. Voimme rakentaa satunnaisen aikasarjadatan trendillรค ja kรคyttรครค sitten diff()-funktiota sarjan stationoimiseen. Diff()-funktio hyvรคksyy yhden argumentin, vektorin, ja palauttaa sopivan viiveellรค lasketun ja iteroidun erotuksen.

HuomautuksiaMeidรคn on usein luotava satunnaista dataa, mutta oppimisen ja vertailun vuoksi haluamme lukujen olevan identtisiรค eri koneilla. Jotta voimme varmistaa, ettรค kaikki tuottavat saman datan, kรคytรคmme set.seed()-funktiota mielivaltaisilla arvoilla 123. set.seed() mรครคrittรครค pseudo-satunnaislukugeneraattorin lรคhtรถpisteen, joten jokainen kone tuottaa saman sekvenssin. Ilman set.seed()-funktiota jokainen suoritus palauttaa eri sekvenssin.

set.seed(123)
## Create the data
x = rnorm(1000)
ts <- cumsum(x)
## Stationary the serie
diff_ts <- diff(ts)
par(mfrow=c(1,2))
## Plot the series
plot(ts, type='l')
plot(diff(ts), type='l')

Kahdessa alla olevassa paneelissa alkuperรคinen kumulatiivinen aikasarja on sijoitettu erotusaikasarjan viereen, joka nyt vaihtelee vakion keskiarvon ympรคrillรค.

Alkuperรคinen kumulatiivinen sarja differentioituneen stationaarisen sarjan vieressรค

pituus()-funktio

Monissa tapauksissa haluamme tietรครค vektorin pituuden laskentaa varten tai for-silmukassa kรคytettรคvรคksi. length()-funktio laskee rivien lukumรครคrรคn vektorissa x. Seuraavat koodit tuovat cars-tietojoukon ja palauttavat rivien lukumรครคrรคn.

Huomautuksia: length() palauttaa vektorin elementtien lukumรครคrรคn. Jos funktio annetaan matriisi tai datakehyksen, palautetaan sarakkeiden lukumรครคrรค.

dt <- cars
## number columns
length(dt)

lรคhtรถ:

## [1] 1
## number rows
length(dt[,1])

lรคhtรถ:

## [1] 50

Matemaattiset toiminnot

Yleisten apufunktioiden lisรคksi R:ssรค on joukko matemaattisia funktioita, jotka suorittavat vektorin toimintoja elementti elementiltรค.

OperaTor Tuotetiedot
abs (x) Ottaa x:n itseisarvon
loki(x,kanta=y) Ottaa x:n logaritmin kantaluvulla y; jos kantaa ei ole mรครคritetty, palauttaa luonnollisen logaritmin
exp (x) Palauttaa x:n eksponentiaalin
sqrt (x) Palauttaa x:n neliรถjuuren
tekijรค(x) Palauttaa x:n kertoimen (x!)
# sequence of number from 44 to 55 both including incremented by 1
x_vector <- seq(45,55, by = 1)
#logarithm
log(x_vector)

lรคhtรถ:

##  [1] 3.806662 3.828641 3.850148 3.871201 3.891820 3.912023 3.931826
##  [8] 3.951244 3.970292 3.988984 4.007333
#exponential
exp(x_vector)
#squared root
sqrt(x_vector)

lรคhtรถ:

##  [1] 6.708204 6.782330 6.855655 6.928203 7.000000 7.071068 7.141428
##  [8] 7.211103 7.280110 7.348469 7.416198
#factorial
factorial(x_vector)

lรคhtรถ:

##  [1] 1.196222e+56 5.502622e+57 2.586232e+59 1.241392e+61 6.082819e+62
##  [6] 3.041409e+64 1.551119e+66 8.065818e+67 4.274883e+69 2.308437e+71
## [11] 1.269640e+73

Tilastotoiminnot

Kun matemaattiset funktiot muuntavat arvoja, tilastolliset funktiot tiivistรคvรคt ne. R:n vakioasennus sisรคltรครค laajan valikoiman tilastollisia funktioita. Tรคssรค opetusohjelmassa tarkastelemme lyhyesti tรคrkeimpiรค.

Tilastolliset perusfunktiot

OperaTor Tuotetiedot
keskiarvo (x) x:n keskiarvo
mediaani(x) x:n mediaani
var(x) x:n varianssi
sd(x) x:n keskihajonta
mittakaava (x) x:n vakiopisteet (z-pisteet).
kvantiili(x) X:n kvartiilit
yhteenveto(x) Yhteenveto x:stรค: keskiarvo, min, max jne.
speed <- dt$speed
speed
# Mean speed of cars dataset
mean(speed)

lรคhtรถ:

## [1] 15.4
# Median speed of cars dataset
median(speed)

lรคhtรถ:

## [1] 15
# Variance speed of cars dataset
var(speed)

lรคhtรถ:

## [1] 27.95918
# Standard deviation speed of cars dataset
sd(speed)

lรคhtรถ:

## [1] 5.287644
# Standardize vector speed of cars dataset		
head(scale(speed), 5)

lรคhtรถ:

##           [,1]
## [1,] -2.155969
## [2,] -2.155969
## [3,] -1.588609
## [4,] -1.588609
## [5,] -1.399489
# Quantile speed of cars dataset
quantile(speed)

lรคhtรถ:

##   0%  25%  50%  75% 100%
##    4   12   15   19   25
# Summary speed of cars dataset
summary(speed)

lรคhtรถ:

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
##     4.0    12.0    15.0    15.4    19.0    25.0

Tรคhรคn mennessรค olemme oppineet paljon R sisรครคnrakennettuja toimintoja.

HuomautuksiaOle varovainen :n kanssa argumentin luokka, eli numeerinen, totuusarvo tai merkkijono. Jos esimerkiksi meidรคn on vรคlitettรคvรค merkkijonoarvo, meidรคn on laitettava merkkijono lainausmerkkeihin: โ€ABCโ€.

Kirjoita funktio R:llรค

Joissakin tapauksissa meidรคn on kirjoitettava oma funktio, koska meidรคn on suoritettava tietty tehtรคvรค eikรค valmista funktiota ole olemassa. Kรคyttรคjรคn mรครคrittelemรค funktio sisรคltรครค nimi, perustelut ja elin.

function.name <- function(arguments) 
{
    computations on the arguments	
    some other code
}		

Huomautuksia: Hyvรค kรคytรคntรถ on nimetรค kรคyttรคjรคn mรครคrittรคmรค funktio eri tavalla kuin sisรครคnrakennettu funktio. Se vรคlttรครค hรคmmennystรค.

Yksi argumenttifunktio

Seuraavassa katkelmassa mรครคritรคmme yksinkertaisen neliรถfunktion. Funktio hyvรคksyy arvon ja palauttaa arvon neliรถn.

square_function<- function(n) 
{
  # compute the square of integer `n`
  n^2
}  
# calling the function and passing value 4
square_function(4)

Code Selitys

  • Funktio on nimeltรครคn neliรถfunktio; sitรค voidaan kutsua miksi haluamme.
  • Se saa argumentin "n". Me ei mรครคrittรคnyt muuttujan tyyppiรค, jotta kรคyttรคjรค voi vรคlittรครค kokonaisluvun, vektorin tai matriisin
  • Funktio ottaa syรถtteen "n" ja palauttaa syรถtteen neliรถn. Kun olet lopettanut funktion kรคytรถn, voimme poistaa sen rm()-funktiolla.

# funktion luomisen jรคlkeen

rm(square_function)
square_function

Konsolissa nรคemme virheilmoituksen :Error: objektia 'square_function' ei lรถydy, mikรค kertoo, ettรค toimintoa ei ole olemassa.

Ympรคristรถtutkimusping

Kirjassa R, ympรคristรถ on kokoelma objekteja, kuten funktioita, muuttujia, datakehyksiรค jne.

R avaa ympรคristรถn joka kerta, kun RStudio kรคynnistetรครคn.

Kรคytettรคvissรค oleva huipputason ympรคristรถ on globaali ympรคristรถ, nimeltรครคn R_GlobalEnv. Ja meillรค on paikallinen ympรคristรถ.

Voimme luetella nykyisen ympรคristรถn sisรคllรถn.

ls(environment())

ulostulo

## [1] "diff_ts"         "dt"              "speed"           "square_function"
## [5] "ts"              "x"               "x_vector"

Nรคet kaikki R_GlobalEnv:ssรค luodut muuttujat ja funktiot.

Yllรค oleva luettelo vaihtelee RStudiossa suorittamasi historiallisen koodin mukaan.

Huomaa, ettรค n, neliรถfunktiofunktion argumentti ei ole tรคssรค globaalissa ympรคristรถssรค.

Jokaiselle funktiolle luodaan uusi ympรคristรถ. Yllรค olevassa esimerkissรค funktio square_function() luo uuden ympรคristรถn funktion sisรคlle. globaali ympรคristรถ.

Selventรคmรครคn eroa maailmanlaajuinen ja paikallinen ympรคristรถssรค, tutkitaan seuraavaa esimerkkiรค

Nรคmรค funktiot ottavat arvon x argumenttina ja lisรครคvรคt sen y-mรครคritteeseen funktion ulkopuolella ja sisรคllรค

Funktio f kรคyttรคen globaalissa ympรคristรถssรค mรครคriteltyรค muuttujaa y

Funktio f palauttaa lรคhdรถn 15. Tรคmรค johtuu siitรค, ettรค y on mรครคritelty globaalissa ympรคristรถssรค. Mitรค tahansa globaalissa ympรคristรถssรค mรครคritettyรค muuttujaa voidaan kรคyttรครค paikallisesti. Muuttujan y arvo on 10 kaikkien toimintokutsujen aikana, ja se on kรคytettรคvissรค milloin tahansa.

Katsotaan mitรค tapahtuu, jos muuttuja y mรครคritellรครคn funktion sisรคllรค.

Meidรคn on pudotettava "y" ennen tรคmรคn koodin suorittamista komennolla rm r

Funktio f, joka mรครคrittelee y:n omassa paikallisessa ympรคristรถssรครคn

Tulos on myรถs 15, kun kutsumme f(5):tรค, mutta palauttaa virheen, kun yritรคmme tulostaa arvon y. Muuttuja y ei ole globaalissa ympรคristรถssรค.

Lopuksi R kรคyttรครค viimeisintรค muuttujan mรครคritelmรครค kulkeakseen funktion rungon sisรคllรค. Tarkastellaanpa seuraavaa esimerkkiรค:

R kรคyttรคen funktion rungon sisรคllรค olevaa y:n sisintรค mรครคritelmรครค

R jรคttรครค huomioimatta funktion ulkopuolella mรครคritetyt y-arvot, koska loimme eksplisiittisesti ay-muuttujan funktion runkoon.

Moniargumenttitoiminto

Voimme kirjoittaa funktion useammalla kuin yhdellรค argumentilla. Harkitse funktiota nimeltรค "ajat". Se on yksinkertainen funktio, joka kertoo kaksi muuttujaa.

times <- function(x,y) {
  x*y
	}
times(2,4)

lรคhtรถ:

## [1] 8

Milloin meidรคn pitรคisi kirjoittaa funktio?

Datatieteilijรถiden on suoritettava monia toistuvia tehtรคviรค. Useimmiten kopioimme ja liitรคmme koodinpรคtkiรค toistuvasti. Esimerkiksi muuttujan normalisointi on erittรคin suositeltavaa ennen kuin suoritamme koneoppiminen algoritmi. Kaava muuttujan normalisoimiseksi on:

Kaava muuttujan normalisoimiseksi

Tiedรคmme jo kuinka kรคyttรครค min()- ja max()-funktioita R:ssรค. Kรคytรคmme tibble-kirjastoa tietokehyksen luomiseen. Tibble on toistaiseksi kรคtevin toiminto tietojoukon luomiseen tyhjรคstรค.

library(tibble)
# Create a data frame
data_frame <- tibble(  
  c1 = rnorm(50, 5, 1.5), 
  c2 = rnorm(50, 5, 1.5),    
  c3 = rnorm(50, 5, 1.5),    
)

Laskemme yllรค kuvatun funktion kahdessa vaiheessa. Ensimmรคisessรค vaiheessa luomme muuttujan nimeltรค c1_norm, joka on c1:n skaalaus. Toisessa vaiheessa kopioimme ja liitรคmme c1_normin koodin ja muutamme sen c2:ksi ja c3:ksi.

Yksityiskohta funktiosta sarakkeella c1:

Nimittรคjรค: : data_frame$c1 -min(data_frame$c1))

Nimittรคjรค: max(data_frame$c1)-min(data_frame$c1))

Siksi voimme jakaa ne sarakkeen c1 normalisoidun arvon saamiseksi:

(data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))

Voimme luoda c1_norm, c2_norm ja c3_norm:

Create c1_norm: rescaling of c1		
data_frame$c1_norm <- (data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))
# show the first five values
head(data_frame$c1_norm, 5)

lรคhtรถ:

## [1] 0.3400113 0.4198788 0.8524394 0.4925860 0.5067991

Se toimii. Voimme kopioida ja liittรครค

data_frame$c1_norm <- (data_frame$c1 -min(data_frame$c1))/(max(data_frame$c1)-min(data_frame$c1))

muuta sitten c1_norm arvoksi c2_norm ja c1 arvoksi c2. Teemme samoin c3_normin luomiseksi

data_frame$c2_norm <- (data_frame$c2 - min(data_frame$c2))/(max(data_frame$c2)-min(data_frame$c2))
data_frame$c3_norm <- (data_frame$c3 - min(data_frame$c3))/(max(data_frame$c3)-min(data_frame$c3))

Skaalasimme tรคydellisesti muuttujat c1, c2 ja c3.

Tรคmรค menetelmรค on kuitenkin altis virheille. Saatamme kopioida ja unohtaa muuttaa sarakkeen nimen liittรคmisen jรคlkeen. Siksi hyvรค kรคytรคntรถ on kirjoittaa funktio joka kerta, kun sama koodi on liitettรคvรค useammin kuin kaksi kertaa. Voimme jรคrjestรครค koodin kaavaksi ja kutsua sitรค aina tarvittaessa. Oman funktion kirjoittamiseksi meidรคn on annettava:

  • Nimi: normalisoida.
  • argumenttien mรครคrรค: Tarvitsemme vain yhden argumentin, joka on sarake, jota kรคytรคmme laskennassamme.
  • Keho: tรคmรค on yksinkertaisesti kaava, jonka haluamme palauttaa.

Jatkamme askel askeleelta luodaksemme funktion normalisoinnin.

Vaihe 1) Luomme nimittรคjรคn, joka on x โ€“ min(x). R:ssรค voimme tallentaa nimittรคjรคn muuttujaan, kuten tรคssรค:

nominator <- x-min(x)

Vaihe 2) Laskemme nimittรคjรคn: max(x) โ€“ min(x). Voimme toistaa vaiheen 1 idean ja tallentaa laskutoimituksen muuttujaan:

denominator <- max(x)-min(x)

Vaihe 3) Teemme jaon nimeรคjรคn ja nimittรคjรคn vรคlillรค.

normalize <- nominator/denominator

Vaihe 4) Palauttaaksemme arvon kutsuvaan funktioon meidรคn on lรคpรคistรคvรค normalise inside return(), jotta saadaan funktion tulos.

return(normalize)

Vaihe 5) Olemme valmiita kรคyttรคmรครคn funktiota wrap-komennollaping kaikki kiinnikkeen sisรคllรค.

normalize <- function(x){
  # step 1: create the nominator
  nominator <- x-min(x)
  # step 2: create the denominator
  denominator <- max(x)-min(x)
  # step 3: divide nominator by denominator
  normalize <- nominator/denominator
  # return the value
  return(normalize)
}

Testataan funktiota muuttujalla c1:

normalize(data_frame$c1)

Se toimii tรคydellisesti. Loimme ensimmรคisen toimintomme.

Funktio on kattavampi tapa suorittaa toistuva tehtรคvรค. Voimme kรคyttรครค normalisointikaavaa eri sarakkeissa, kuten alla:

data_frame$c1_norm_function <- normalize (data_frame$c1)
data_frame$c2_norm_function <- normalize	(data_frame$c2)
data_frame$c3_norm_function <- normalize	(data_frame$c3)

Vaikka esimerkki on yksinkertainen, voimme pรครคtellรค kaavan tehon. Yllรค oleva koodi on helpompi lukea ja siinรค vรคltetรครคn koodin liittรคmiseen liittyvรคt virheet.

Toimii ehdon kanssa

normalize()-funktio tekee aina saman asian. Joskus meidรคn on lisรคttรคvรค funktioon ehtoja, jotta koodi voi palauttaa erilaisia โ€‹โ€‹โ€‹โ€‹tulosteita.

Koneoppimistehtรคvissรค meidรคn on jaettava tietojoukko junajoukon ja testijoukon kesken. Junasarja antaa algoritmille mahdollisuuden oppia tiedoista. Testaaksemme mallimme suorituskykyรค voimme kรคyttรครค testisarjaa suorituskyvyn mittauksen palauttamiseen. R:llรค ei ole toimintoa kahden tietojoukon luomiseksi. Voimme kirjoittaa oman funktiomme tรคtรค varten. Funktiomme ottaa kaksi argumenttia ja on nimeltรครคn split_data(). Idea on yksinkertainen, kerromme aineiston pituus (eli havaintojen lukumรครคrรค) 0.8:lla. Jos esimerkiksi haluamme jakaa tietojoukon 80/20 ja tietojoukossamme on 100 riviรค, funktiomme kertoo 0.8*100 = 80. 80 riviรค valitaan harjoitustiedoksemme.

Kรคytรคmme ilmanlaatutietoaineistoa testataksemme kรคyttรคjรคn mรครคrittรคmรครค toimintoamme. Ilmanlaatutietojoukossa on 153 riviรค. Nรคemme sen alla olevalla koodilla:

nrow(airquality)

lรคhtรถ:

## [1] 153

Jatketaan seuraavasti:

split_data <- function(df, train = TRUE)
Arguments:
-df: Define the dataset
-train: Specify if the function returns the train set or test set. By default, set to TRUE

Funktiollamme on kaksi argumenttia. Argumenttijono on Boolen parametri. Jos se on TOSI, funktiomme luo junatietojoukon, muussa tapauksessa testitietojoukon.

Voimme jatkaa samalla tavalla kuin normalize()-funktion kanssa. Kirjoitamme koodin ikรครคn kuin se olisi kertakรคyttรถistรค koodia ja sitten lisรครคmme kaiken ehdon sisรครคn funktion runkoon luodaksemme funktion.

Vaihe 1:

Meidรคn on laskettava tietojoukon pituus. Tรคmรค tehdรครคn funktiolla nrow(). Nrow palauttaa tietojoukon rivien kokonaismรครคrรคn. Kutsumme muuttuvaa pituutta.

length<- nrow(airquality)
length

lรคhtรถ:

## [1] 153

Vaihe 2:

Kerrotaan pituus 0.8:lla. Se palauttaa valittavien rivien mรครคrรคn. Sen pitรคisi olla 153 * 0.8 = 122.4

total_row <- length*0.8
total_row

lรคhtรถ:

## [1] 122.4

Haluamme valita 122 riviรค ilmanlaatutietojoukon 153 rivistรค. Luomme luettelon, joka sisรคltรครค arvot 1 - total_row. Tallennamme tuloksen muuttujaan nimeltรค split

split <- 1:total_row
split[1:5]

lรคhtรถ:

## [1] 1 2 3 4 5

split valitsee tietojoukosta ensimmรคiset 122 riviรค. Voimme esimerkiksi nรคhdรค, ettรค muuttujajakomme kerรครค arvot 1, 2, 3, 4, 5 ja niin edelleen. Nรคmรค arvot ovat indeksi, kun valitsemme palautettavat rivit.

Vaihe 3:

Meidรคn on valittava ilmanlaatutietojoukon rivit jaettuun muuttujaan tallennettujen arvojen perusteella. Tรคmรค tehdรครคn nรคin:

train_df <- airquality[split, ] 
head(train_df)

lรคhtรถ:

##[1]    Ozone Solar.R Wind Temp Month Day
##[2]  51    13     137 10.3   76     6  20
##[3]  15    18      65 13.2   58     5  15
##[4]  64    32     236  9.2   81     7   3
##[5]  27    NA      NA  8.0   57     5  27
##[6]  58    NA      47 10.3   73     6  27
##[7]  44    23     148  8.0   82     6  13

Vaihe 4:

Voimme luoda testitietojoukon kรคyttรคmรคllรค jรคljellรค olevia rivejรค, 123:153. Tรคmรค tehdรครคn kรคyttรคmรคllรค - splitin edessรค.

test_df <- airquality[-split, ] 
head(test_df)

lรคhtรถ:

##[1] Ozone Solar.R Wind Temp Month Day
##[2]  123    85     188  6.3   94     8  31
##[3]  124    96     167  6.9   91     9   1
##[4]  125    78     197  5.1   92     9   2
##[5]  126    73     183  2.8   93     9   3
##[6]  127    91     189  4.6   93     9   4
##[7]  128    47      95  7.4   87     9   5

Vaihe 5:

Voimme luoda ehdon funktion runkoon. Muista, ettรค meillรค on argumenttijuna, joka on oletuksena TOSI, joka palauttaa junajoukon. Ehdon luomiseen kรคytรคmme if-syntaksia:

  if (train ==TRUE){ 
    train_df <- airquality[split, ] 
      return(train)		
  } else {
    test_df <- airquality[-split, ] 
      return(test)		
  }

Tรคssรค se, voimme kirjoittaa funktion. Meidรคn tarvitsee vain muuttaa ilmanlaatu df:ksi, koska haluamme kokeilla toimintoamme mihin tahansa datakehys, ei vain ilmanlaatua:

split_data <- function(df, train = TRUE){
  length<- nrow(df)
  total_row <- length *0.8
  split <- 1:total_row
  if (train ==TRUE){ 
    train_df <- df[split, ] 
      return(train_df)		
  } else {
    test_df <- df[-split, ] 
      return(test_df)		
  }
}

Kokeillaan funktiotamme ilmanlaatudatajoukolla. Meillรค pitรคisi olla yksi 122 rivin junajoukko ja 31 rivin testijoukko.

train <- split_data(airquality, train = TRUE)
dim(train)

lรคhtรถ:

## [1] 122   6
test <- split_data(airquality, train = FALSE)
dim(test)

lรคhtรถ:

## [1] 31  6

UKK

Anna mรครคritelmรคssรค arvo, kuten function(df, train = TRUE). Jos kutsuja jรคttรครค kyseisen argumentin pois, R kรคyttรครค oletusarvoa. Oletusarvot evaluoidaan laiskasti, joten yksi oletusarvo voi jopa viitata saman funktion toiseen argumenttiin.

Kyllรค. Funktio voi kutsua itseรครคn niin kauan kuin stop-funktio on kรคytรถssรค.ping ehto lopettaa ketjun โ€“ esimerkiksi kertoma, joka palauttaa arvon 1, kun n saavuttaa arvon 1. Syvรค rekursio voi saavuttaa lausekkeiden sisรคkkรคisyyden rajan, joten iterointi on usein turvallisempaa.

Ei. R palauttaa viimeksi lasketun lausekkeen arvon automaattisesti, minkรค vuoksi square_function() toimii ilman return()-funktiota. Kรคytรค return()-funktiota, kun tarvitaan varhainen lopetus tai kun eksplisiittinen tulos helpottaa funktion lukemista.

R lรถytรครค ensin tรคsmรคllisen nimen, sitten osittaisen nimen ja lopuksi jรคljelle jรครคvรคn nimen sijainnin. Argumenttien nimeรคminen eksplisiittisesti, kuten seq(45, 55, by = 1), pitรครค kutsun luettavana ja suojassa vahingossa tapahtuvalta uudelleenjรคrjestykseltรค.

Funktio, joka luodaan ilman nimeรค ja joka yleensรค vรคlitetรครคn suoraan sapply()- tai lapply()-funktiolle. Versiossa R 4.1 on lisรคtty lyhennetty kenoviivamuoto, joten \(x) x^2 tekee saman tehtรคvรคn kuin function(x) x^2 huomattavasti vรคhemmรคllรค typografialla.ping.

Uusi mรครคritelmรค peittรครค sisรครคnrakennetun version kyseisessรค ympรคristรถssรค, joten length():n kutsuminen saattaa suorittaa oman versiosi perusversion sijaan. Poista kopio rm():llรค tai valitse alusta alkaen eri nimi.

Tekoรคlyavustajat luonnostelevat funktioiden runkoja selkokielisestรค kommentista, ehdottavat jรคrkeviรค argumenttien oletusarvoja ja luovat yksikkรถtestejรค. Suorita luotu koodi aina oikeaa dataa vasten, koska uskottavan nรคkรถinen R-funktio voi silti palauttaa hiljaa vรครคriรค arvoja.

Kyllรค. RStudio Desktop 2023.09.0 ja uudemmat versiot toimittavat valinnaisen version GitHub Copilot integrointi. Se tรคydentรครค funktioiden rungot kommentin perusteella, mutta tarkistaa jokaisen ehdotuksen, koska se ei voi nรคhdรค tietojasi.

Tiivistรค tรคmรค viesti seuraavasti: