Funkcije u R programiranju s primjerom

โšก Pametni saลพetak

Funkcije u R-u pakiraju skup instrukcija pod jednim imenom, tako da se ponovljeni zadatak izvrลกava iz jednog poziva. Ugraฤ‘eni matematiฤki i statistiฤki pomagaฤi, korisniฤki definirane funkcije, sco okruลพenjaping, a uvjetni argumenti ovdje su obraฤ‘eni s primjerima obrade.

  • ๐Ÿ”˜ Anatomija funkcije: Funkcija kombinira naziv, opcionalni popis argumenata, tijelo i opcionalnu povratnu vrijednost.
  • ๐Ÿงฎ Ugraฤ‘ena pokrivenost: R nudi opฤ‡enite pomoฤ‡ne funkcije poput diff() i length() uz matematiฤke i statistiฤke funkcije.
  • ๐Ÿ“ Viลกekratno skaliranje: Funkcija normalize() pretvara blok za promjenu skaliranja kopiranjem i lijepljenjem u jedan poziv za viลกekratnu upotrebu.
  • ๐Ÿงญ Pravila zaลกtite okoliลกa: Svaki poziv otvara lokalno okruลพenje, a R razrjeลกava ime od najunutarnje definicije prema van.
  • ๐Ÿงช Uvjetna logika: if/else grana unutar split_data() vraฤ‡a ili skup za uฤenje ili skup za testiranje.
  • ๐Ÿ› ๏ธ Praksa imenovanja: Imenovanje korisniฤki definirane funkcije drugaฤije od ugraฤ‘ene funkcije izbjegava maskiranje i zbunjujuฤ‡e pogreลกke.

Funkcije u R programiranju

ล to je funkcija u R-u?

A funkcija, u programskom okruลพenju, skup je instrukcija. Programer gradi funkciju koju treba izbjegavati ponavljanje istog zadatkaili smanjiti sloลพenost.

Funkcija bi trebala biti

  • napisan za izvrลกavanje odreฤ‘enog zadatka
  • moลพe ali ne mora ukljuฤivati โ€‹โ€‹argumente
  • sadrลพavati tijelo
  • moลพe, ali i ne mora vratiti jednu ili viลกe vrijednosti.

Opฤ‡i pristup funkciji je koriลกtenje dijela argumenta kao ulazi, nahrani tijelu dio i konaฤno vratiti an izlaz. Sintaksa funkcije je sljedeฤ‡a:

function (arglist)  {
  #Function body
}

R vaลพne ugraฤ‘ene funkcije

Postoji mnogo ugraฤ‘enih funkcija u R. R usklaฤ‘uje vaลกe ulazne parametre sa svojim argumentima funkcije, bilo prema vrijednosti ili poloลพaju, a zatim izvrลกava tijelo funkcije. Argumenti funkcije mogu imati zadane vrijednosti: ako ne navedete ove argumente, R ฤ‡e uzeti zadanu vrijednost.
biljeลกke:
Moguฤ‡e je vidjeti izvorni kod funkcije pokretanjem naziva same funkcije u konzoli.

Typing Naziv funkcije bez zagrada ispisuje njen izvorni kod, kao ลกto je prikazano u konzoli ispod.

R konzola ispisuje izvorni kod ugraฤ‘ene funkcije

Vidjet ฤ‡emo tri skupine funkcija na djelu

  • Opฤ‡a funkcija
  • Matematiฤka funkcija
  • Statistiฤka funkcija

Opฤ‡e funkcije

Veฤ‡ smo upoznati s opฤ‡im funkcijama poput cbind(), rbind(), range(), vrsta()i order(). Svaka od ovih funkcija ima specifiฤan zadatak, prima argumente za vraฤ‡anje izlaza. Slijede vaลพne funkcije koje morate znati -

funkcija diff().

Ako radite na vremenske serije, trebate stacionirati seriju uzimajuฤ‡i njihove vrijednosti kaลกnjenja. stacionarni proces Omoguฤ‡uje konstantnu srednju vrijednost, varijancu i autokorelaciju tijekom vremena. To uglavnom poboljลกava predviฤ‘anje vremenskog niza. To se moลพe uฤiniti funkcijom diff(). Moลพemo izgraditi sluฤajni vremenski niz podataka s trendom, a zatim koristiti funkciju diff() za stacionarizaciju niza. Funkcija diff() prihvaฤ‡a jedan argument, vektor, i vraฤ‡a odgovarajuฤ‡u pomaknutu i iteriranu razliku.

biljeลกkeฤŒesto trebamo stvarati sluฤajne podatke, ali za uฤenje i usporedbu ลพelimo da brojevi budu identiฤni na svim strojevima. Kako bismo osigurali da svi generiramo iste podatke, koristimo funkciju set.seed() s proizvoljnim vrijednostima 123. set.seed() fiksira poฤetnu toฤku generatora pseudosluฤajnih brojeva, tako da svaki stroj proizvodi isti niz. Bez set.seed(), svako pokretanje vraฤ‡a drugaฤiji niz.

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')

Dva panela ispod smjeลกtaju izvorni kumulativni niz pored diferenciranog niza, koji sada fluktuira oko konstantne srednje vrijednosti.

Izvorni kumulativni niz pored diferenciranog stacionarnog niza

funkcija length().

U mnogim sluฤajevima ลพelimo znati duljinu vektora za izraฤun ili za koriลกtenje u for petlji. Funkcija length() broji broj redaka u vektoru x. Sljedeฤ‡i kodovi uvoze skup podataka o automobilima i vraฤ‡aju broj redaka.

biljeลกke: length() vraฤ‡a broj elemenata u vektoru. Ako se funkcija prosljeฤ‘uje u matrica ili podatkovni okvir, vraฤ‡a se broj stupaca.

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

Izlaz:

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

Izlaz:

## [1] 50

Matematiฤke funkcije

Osim opฤ‡ih pomoฤ‡nih funkcija, R ima niz matematiฤkih funkcija koje operiraju element po element na vektoru.

Operahumka Description
trbuลกnjaci (x) Uzima apsolutnu vrijednost x
log(x,baza=y) Uzima logaritam od x s bazom y; ako baza nije navedena, vraฤ‡a prirodni logaritam
exp(x) Vraฤ‡a eksponencijal od x
sqrt (x) Vraฤ‡a kvadratni korijen od x
faktorijel(x) Vraฤ‡a faktorijel x (x!)
# sequence of number from 44 to 55 both including incremented by 1
x_vector <- seq(45,55, by = 1)
#logarithm
log(x_vector)

Izlaz:

##  [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)

Izlaz:

##  [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)

Izlaz:

##  [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

Statistiฤke funkcije

Tamo gdje matematiฤke funkcije transformiraju vrijednosti, statistiฤke funkcije ih saลพimaju. Standardna instalacija R-a sadrลพi ลกirok raspon statistiฤkih funkcija. U ovom ฤ‡emo vodiฤu ukratko pogledati najvaลพnije.

Osnovne statistiฤke funkcije

Operahumka Description
srednja vrijednost (x) Srednja vrijednost x
medijan(x) Medijan od x
var(x) Varijanca x
sd(x) Standardna devijacija x
skala (x) Standardni rezultati (z-rezultati) od x
kvantil(x) Kvartili od x
saลพetak(x) Saลพetak x: srednja vrijednost, min, maks itd.
speed <- dt$speed
speed
# Mean speed of cars dataset
mean(speed)

Izlaz:

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

Izlaz:

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

Izlaz:

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

Izlaz:

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

Izlaz:

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

Izlaz:

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

Izlaz:

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

Do ove toฤke nauฤili smo puno R ugraฤ‘enih funkcija.

biljeลกke: Budite oprezni s klasa argumenta, tj. numeriฤki, logiฤki ili niz znakova. Na primjer, ako trebamo proslijediti niz znakova, moramo ga staviti u navodnike: โ€žABCโ€œ.

Napiลกite funkciju u R

U nekim sluฤajevima moramo napisati vlastitu funkciju jer moramo izvrลกiti odreฤ‘eni zadatak, a ne postoji gotova funkcija. Korisniฤki definirana funkcija ukljuฤuje ime, argumenti a tijelu.

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

biljeลกke: Dobra praksa je imenovanje korisniฤki definirane funkcije drugaฤije od ugraฤ‘ene funkcije. Izbjegava zabunu.

Funkcija jednog argumenta

U sljedeฤ‡em isjeฤku definiramo jednostavnu kvadratnu funkciju. Funkcija prihvaฤ‡a vrijednost i vraฤ‡a kvadrat vrijednosti.

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

Code Objaลกnjenje

  • Funkcija se zove square_function; moลพe se zvati kako god ลพelimo.
  • Prima argument "n". Mi nije odredio vrstu varijable tako da korisnik moลพe proslijediti cijeli broj, vektor ili matricu
  • Funkcija uzima ulaz "n" i vraฤ‡a kvadrat ulaza. Kada zavrลกite s upotrebom funkcije, moลพemo je ukloniti pomoฤ‡u funkcije rm().

# nakon ลกto stvorite funkciju

rm(square_function)
square_function

Na konzoli moลพemo vidjeti poruku o pogreลกci :Error: object 'square_function' not found ลกto govori da funkcija ne postoji.

Okoliลกna komisijaping

U R, okolina je skup objekata poput funkcija, varijabli, okvira podataka itd.

R otvara okruลพenje svaki put kada se pokrene RStudio.

Dostupno okruลพenje najviลกe razine je globalno okruลพenje, nazvan R_GlobalEnv. I imamo lokalnoj sredini.

Moลพemo navesti sadrลพaj trenutnog okruลพenja.

ls(environment())

Izlaz

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

Moลพete vidjeti sve varijable i funkcije stvorene u R_GlobalEnv.

Gornji popis ฤ‡e se razlikovati ovisno o povijesnom kodu koji izvrลกavate u RStudiu.

Imajte na umu da n, argument funkcije kvadrat_funkcije nije u ovom globalnom okruลพenju.

Za svaku funkciju stvara se novo okruลพenje. U gornjem primjeru, funkcija square_function() stvara novo okruลพenje unutar globalno okruลพenje.

Da razjasnimo razliku izmeฤ‘u globalno i lokalne okruลพenje, prouฤimo sljedeฤ‡i primjer

Ova funkcija uzima vrijednost x kao argument i dodaje je y definiranju izvan i unutar funkcije

Funkcija f koja koristi varijablu y definiranu u globalnom okruลพenju

Funkcija f vraฤ‡a izlaz 15. To je zato ลกto je y definiran u globalnom okruลพenju. Bilo koja varijabla definirana u globalnom okruลพenju moลพe se koristiti lokalno. Varijabla y ima vrijednost 10 tijekom svih poziva funkcije i dostupna je u bilo kojem trenutku.

Pogledajmo ลกto se dogaฤ‘a ako je varijabla y definirana unutar funkcije.

Moramo ispustiti `y` prije pokretanja ovog koda koristeฤ‡i rm r

Funkcija f koja definira y unutar vlastitog lokalnog okruลพenja

Izlaz je takoฤ‘er 15 kada pozovemo f(5), ali vraฤ‡a pogreลกku kada pokuลกamo ispisati vrijednost y. Varijabla y nije u globalnom okruลพenju.

Konaฤno, R koristi najnoviju definiciju varijable za prolaz unutar tijela funkcije. Razmotrimo sljedeฤ‡i primjer:

R koristeฤ‡i najdublju definiciju y unutar tijela funkcije

R zanemaruje y vrijednosti definirane izvan funkcije jer smo eksplicitno stvorili y varijablu unutar tijela funkcije.

Funkcija s viลกe argumenata

Funkciju moลพemo napisati s viลกe od jednog argumenta. Razmotrite funkciju koja se zove "puta". To je jednostavna funkcija koja mnoลพi dvije varijable.

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

Izlaz:

## [1] 8

Kada trebamo napisati funkciju?

Znanstvenici podataka moraju obavljati mnogo repetitivnih zadataka. Veฤ‡inu vremena kopiramo i lijepimo dijelove koda viลกe puta. Na primjer, normalizacija varijable se toplo preporuฤuje prije pokretanja stroj za uฤenje algoritam. Formula za normalizaciju varijable je:

Formula za normalizaciju varijable

Veฤ‡ znamo kako koristiti funkcije min() i max() u R. Koristimo biblioteku tibble za stvaranje okvira podataka. Tibble je do sada najprikladnija funkcija za stvaranje skupa podataka od nule.

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),    
)

Gore opisanu funkciju izraฤunat ฤ‡emo u dva koraka. U prvom koraku stvorit ฤ‡emo varijablu pod nazivom c1_norm koja predstavlja preoblikovanje c1. U drugom koraku samo kopiramo i zalijepimo kod c1_norm te ga zamijenimo s c2 i c3.

Detalj funkcije sa stupcem c1:

Nominator: : data_frame$c1 -min(data_frame$c1))

Nazivnik: max(data_frame$c1)-min(data_frame$c1))

Stoga ih moลพemo podijeliti da dobijemo normaliziranu vrijednost stupca c1:

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

Moลพemo kreirati c1_norm, c2_norm i 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)

Izlaz:

## [1] 0.3400113 0.4198788 0.8524394 0.4925860 0.5067991

Radi. Moลพemo kopirati i zalijepiti

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

zatim promijenite c1_norm u c2_norm i c1 u c2. ฤŒinimo isto da stvorimo c3_norm

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))

Savrลกeno smo skalirali varijable c1, c2 i c3.

Meฤ‘utim, ova metoda je sklona pogreลกkama. Mogli bismo kopirati i zaboraviti promijeniti naziv stupca nakon lijepljenja. Stoga je dobra praksa napisati funkciju svaki put kada trebate zalijepiti isti kod viลกe od dva puta. Kod moลพemo preurediti u formulu i pozvati je kad god je potrebno. Da bismo napisali vlastitu funkciju, moramo dati:

  • Naziv: normalizirati.
  • broj argumenata: Trebamo samo jedan argument, a to je stupac koji koristimo u naลกem izraฤunu.
  • Tijelo: to je jednostavno formula koju ลพelimo vratiti.

Nastavit ฤ‡emo korak po korak za stvaranje normalizacije funkcije.

Korak 1) Stvaramo nominator, koji je x โ€“ min(x). U R-u moลพemo pohraniti nominator u varijablu poput ove:

nominator <- x-min(x)

Korak 2) Izraฤunavamo nazivnik: max(x) โ€“ min(x). Moลพemo ponoviti ideju iz koraka 1 i pohraniti izraฤun u varijablu:

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

Korak 3) Izvodimo dijeljenje izmeฤ‘u nazivnika i nazivnika.

normalize <- nominator/denominator

Korak 4) Da bismo vratili vrijednost pozivnoj funkciji, moramo proฤ‡i normalizaciju unutar return() da bismo dobili izlaz funkcije.

return(normalize)

Korak 5) Spremni smo koristiti funkciju prelamanjemping sve unutar zagrade.

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)
}

Testirajmo naลกu funkciju s varijablom c1:

normalize(data_frame$c1)

Radi savrลกeno. Stvorili smo naลกu prvu funkciju.

Funkcija je sveobuhvatniji naฤin izvrลกavanja zadatka koji se ponavlja. Moลพemo koristiti formulu za normalizaciju nad razliฤitim stupcima, kao ลกto je prikazano u nastavku:

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)

Iako je primjer jednostavan, moลพemo zakljuฤiti snagu formule. Gornji kod je lakลกi za ฤitanje i izbjegava pogreลกke koje se javljaju prilikom lijepljenja koda.

Funkcije s uvjetom

Funkcija normalize() uvijek radi istu stvar. Ponekad moramo ukljuฤiti uvjete u funkciju kako bismo omoguฤ‡ili kodu da vraฤ‡a razliฤite izlaze.

U zadacima strojnog uฤenja moramo podijeliti skup podataka izmeฤ‘u skupa vlakova i testnog skupa. Skup vlakova omoguฤ‡uje algoritmu da uฤi iz podataka. Kako bismo testirali izvedbu naลกeg modela, moลพemo koristiti testni skup za vraฤ‡anje mjere izvedbe. R nema funkciju za stvaranje dva skupa podataka. Moลพemo napisati vlastitu funkciju da to uฤinimo. Naลกa funkcija uzima dva argumenta i zove se split_data(). Ideja iza je jednostavna, mnoลพimo duljinu skupa podataka (tj. broj opaลพanja) s 0.8. Na primjer, ako ลพelimo podijeliti skup podataka 80/20, a naลก skup podataka sadrลพi 100 redaka, tada ฤ‡e naลกa funkcija pomnoลพiti 0.8*100 = 80. 80 redaka bit ฤ‡e odabrano da postanu naลกi podaci za obuku.

Koristit ฤ‡emo skup podataka o kvaliteti zraka za testiranje naลกe korisniฤki definirane funkcije. Skup podataka o kvaliteti zraka ima 153 retka. Moลพemo to vidjeti pomoฤ‡u koda ispod:

nrow(airquality)

Izlaz:

## [1] 153

Postupit ฤ‡emo na sljedeฤ‡i naฤin:

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

Naลกa funkcija ima dva argumenta. Niz argumenata je Booleov parametar. Ako je postavljeno na TRUE, naลกa funkcija stvara skup podataka o vlaku, u suprotnom, stvara testni skup podataka.

Moลพemo nastaviti kao ลกto smo uฤinili s funkcijom normalize(). Kod piลกemo kao da je rijeฤ samo o jednokratnom kodu, a zatim sve s uvjetom omotamo u tijelo kako bismo stvorili funkciju.

Korak 1:

Moramo izraฤunati duljinu skupa podataka. To se radi pomoฤ‡u funkcije nrow(). Nrow vraฤ‡a ukupan broj redaka u skupu podataka. Promjenljivu duljinu nazivamo.

length<- nrow(airquality)
length

Izlaz:

## [1] 153

Korak 2:

Duljinu mnoลพimo s 0.8. Vratit ฤ‡e broj redaka za odabir. Trebalo bi biti 153*0.8 = 122.4

total_row <- length*0.8
total_row

Izlaz:

## [1] 122.4

ลฝelimo odabrati 122 retka meฤ‘u 153 retka u skupu podataka o kvaliteti zraka. Stvaramo popis koji sadrลพi vrijednosti od 1 do total_row. Rezultat pohranjujemo u varijablu koja se zove split

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

Izlaz:

## [1] 1 2 3 4 5

split odabire prva 122 reda iz skupa podataka. Na primjer, moลพemo vidjeti da naลกa varijabla split okuplja vrijednosti 1, 2, 3, 4, 5 i tako dalje. Ove vrijednosti ฤ‡e biti indeks kada budemo birali retke koje ฤ‡emo vratiti.

Korak 3:

Moramo odabrati retke u skupu podataka o kvaliteti zraka na temelju vrijednosti pohranjenih u podijeljenoj varijabli. To se radi ovako:

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

Izlaz:

##[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

Korak 4:

Moลพemo izraditi testni skup podataka koriลกtenjem preostalih redaka, 123:153. To se radi pomoฤ‡u โ€“ ispred split.

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

Izlaz:

##[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

Korak 5:

Moลพemo stvoriti stanje unutar tijela funkcije. Upamtite, imamo niz argumenata koji je Booleov postavljen na TRUE prema zadanim postavkama za vraฤ‡anje skupa niza. Za stvaranje uvjeta koristimo if sintaksu:

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

To je to, moลพemo napisati funkciju. Samo trebamo promijeniti kvalitetu zraka u df jer ลพelimo isprobati naลกu funkciju na bilo koju podatkovni okvir, ne samo kvaliteta zraka:

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)		
  }
}

Isprobajmo naลกu funkciju na skupu podataka o kvaliteti zraka. Trebali bismo imati jedan skup vlakova sa 122 retka i testni skup s 31 retkom.

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

Izlaz:

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

Izlaz:

## [1] 31  6

Pitanja i odgovori

Dodijelite vrijednost u definiciji, kao ลกto je function(df, train = TRUE). Ako pozivatelj izostavi taj argument, R koristi zadanu vrijednost. Zadane vrijednosti se procjenjuju lijeno, tako da jedna zadana vrijednost moลพe ฤak i referencirati na drugi argument iste funkcije.

Da. Funkcija moลพe pozivati โ€‹โ€‹samu sebe sve dok je stopping Uvjet zavrลกava lanac - faktorijel koji vraฤ‡a 1 kada n dosegne 1, na primjer. Duboka rekurzija moลพe dosegnuti granicu ugnijeลพฤ‘ivanja izraza, pa je iteracija ฤesto sigurnija.

Ne. R automatski vraฤ‡a vrijednost zadnjeg procijenjenog izraza, zbog ฤega square_function() radi bez return(). Koristite return() kada je potreban rani izlaz ili kada eksplicitni rezultat olakลกava ฤitanje funkcije.

R prvo traลพi toฤno ime, zatim djelomiฤno ime, a zatim poziciju za preostalo. Eksplicitno imenovanje argumenata, kao u seq(45, 55, by = 1), odrลพava poziv ฤitljivim i sigurnim od sluฤajnog mijenjanja redoslijeda.

Funkcija stvorena bez dodjeljivanja imena, obiฤno se prosljeฤ‘uje izravno u sapply() ili lapply(). R 4.1 dodao je skraฤ‡eni oblik obrnute kose crte, tako da \(x) x^2 obavlja isti posao kao i function(x) x^2 u puno manjem zamahu.ping.

Nova definicija maskira ugraฤ‘eno unutar tog okruลพenja, tako da pozivanje length() moลพe pokrenuti vaลกu verziju umjesto osnovne. Uklonite kopiju pomoฤ‡u rm() ili odaberite drugaฤije ime od poฤetka.

AI asistenti izraฤ‘uju kosture funkcija iz komentara napisanog jednostavnim engleskim jezikom, predlaลพu razumne zadane vrijednosti argumenata i generiraju jediniฤne testove. Uvijek pokrenite generirani kod na stvarnim podacima, jer R funkcija koja izgleda uvjerljivo i dalje moลพe vratiti tiho pogreลกne vrijednosti.

Da. RStudio Desktop 2023.09.0 i novije verzije isporuฤuju se s opcijom prijave GitHub kopilot integracija. Dovrลกava tijela funkcija iz komentara, ali pregledava svaki prijedlog jer ne moลพe vidjeti vaลกe podatke.

Saลพmite ovu objavu uz: