Functies in R-programmering met voorbeeld

โšก Slimme samenvatting

Functies in R bundelen een reeks instructies onder รฉรฉn naam, waardoor een herhaalde taak met รฉรฉn enkele aanroep kan worden uitgevoerd. Ingebouwde wiskundige en statistische hulpmiddelen, door de gebruiker gedefinieerde functies en omgevingsvariabelen maken het mogelijk om instructies te verwerken.pingEn voorwaardelijke argumenten worden hier behandeld met uitgewerkte voorbeelden.

  • ๐Ÿ”˜ Functionele anatomie: Een functie bestaat uit een naam, een optionele lijst met argumenten, een functiebody en een optionele retourwaarde.
  • ๐Ÿงฎ Ingebouwde dekking: R biedt naast wiskundige en statistische functies ook algemene hulpfuncties zoals diff() en length().
  • ๐Ÿ“ Herbruikbare herschaling: De functie normalize() zet een herschalingsblok dat via kopiรซren en plakken wordt gegenereerd om in รฉรฉn herbruikbare aanroep.
  • ๐Ÿงญ Milieuregels: Elke aanroep opent een lokale omgeving, en R lost een naam op vanuit de binnenste definitie naar buiten toe.
  • ๐Ÿงช Voorwaardelijke logica: Een if/else-vertakking binnen split_data() retourneert ofwel de trainingsset ofwel de testset.
  • ๏ธ Naamgevingsoefening: Door een door de gebruiker gedefinieerde functie een andere naam te geven dan een ingebouwde functie, worden maskering en verwarrende fouten voorkomen.

Functies in R-programmering

Wat is een functie in R?

A functie, in een programmeeromgeving, is een reeks instructies. Een programmeur bouwt een functie om te vermijden dezelfde taak herhalen, of verminderen ingewikkeldheid.

Een functie zou moeten zijn

  • geschreven om een โ€‹โ€‹specifieke taak uit te voeren
  • kan wel of geen argumenten bevatten
  • een lichaam bevatten
  • Kan al dan niet รฉรฉn of meerdere waarden retourneren.

Een algemene benadering van een functie is om het argumentgedeelte as te gebruiken ingangen, Eten geven aan lichaam deel en uiteindelijk een terug uitvoerDe syntaxis van een functie is als volgt:

function (arglist)  {
  #Function body
}

R belangrijke ingebouwde functies

Er zijn veel ingebouwde functies in R. R matcht uw invoerparameters met zijn functieargumenten, hetzij op waarde of op positie, en voert vervolgens de hoofdtekst van de functie uit. Functieargumenten kunnen standaardwaarden hebben: als u deze argumenten niet opgeeft, zal R de standaardwaarde aannemen.
Note:
Het is mogelijk om de broncode van een functie te zien door de naam van de functie zelf in de console uit te voeren.

Typing Een functienaam zonder haakjes print de broncode ervan, zoals de console hieronder laat zien.

De broncode van een ingebouwde functie wordt afgedrukt in de R-console.

We zullen drie groepen functies in actie zien

  • Algemene functie
  • Wiskundige functie
  • Statistische functie

Algemene functies

We zijn al bekend met algemene functies zoals cbind(), rbind(), range(), soort()en order(). Elk van deze functies heeft een specifieke taak en neemt argumenten aan om een โ€‹โ€‹uitvoer te retourneren. De volgende functies zijn belangrijk om te kennen:

diff()-functie

Als je werkt aan tijdreeksen, je moet de serie stationair maken door hun te nemen lag-waarden. Een stationair proces Dit zorgt voor een constant gemiddelde, variantie en autocorrelatie in de tijd. Dit verbetert met name de voorspelling van een tijdreeks. Dit kan worden gedaan met de functie `diff()`. We kunnen een willekeurige tijdreeks met een trend genereren en vervolgens de functie `diff()` gebruiken om de reeks stationair te maken. De functie `diff()` accepteert รฉรฉn argument, een vector, en retourneert een geschikt vertraagd en herhaald verschil.

NoteWe moeten vaak willekeurige data genereren, maar voor leer- en vergelijkingsdoeleinden willen we dat de getallen op alle machines identiek zijn. Om ervoor te zorgen dat we allemaal dezelfde data genereren, gebruiken we de functie `set.seed()` met willekeurige waarden van 123. `set.seed()` fixeert het startpunt van de pseudowillekeurige getallengenerator, zodat elke machine dezelfde reeks produceert. Zonder `set.seed()` levert elke run een andere reeks op.

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

De twee onderstaande panelen tonen de oorspronkelijke cumulatieve reeks naast de gedifferentieerde reeks, die nu rond een constant gemiddelde schommelt.

Oorspronkelijke cumulatieve reeks naast de gedifferentieerde stationaire reeks

lengte() functie

In veel gevallen willen we de lengte van een vector weten voor berekeningen of om te gebruiken in een for-lus. De functie `length()` telt het aantal rijen in vector x. De volgende code importeert de dataset `cars` en retourneert het aantal rijen.

Note: length() retourneert het aantal elementen in een vector. Als de functie wordt doorgegeven aan een Matrix Of het nu een dataframe is of niet, het aantal kolommen wordt geretourneerd.

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

Output:

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

Output:

## [1] 50

Wiskundige functies

Naast de algemene hulpmiddelen beschikt R over een reeks wiskundige functies die element voor element op een vector werken.

Operator Beschrijving
buikspieren (x) Neemt de absolute waarde van x
log(x,basis=y) Neemt de logaritme van x met grondtal y; als grondtal niet is opgegeven, retourneert de natuurlijke logaritme
exp(x) Geeft de exponentiรซle waarde van x
sqrt (x) Retourneert de vierkantswortel van x
faculteit(x) Geeft de faculteit van 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)

Output:

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

Output:

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

Output:

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

Statistische functies

Waar wiskundige functies waarden transformeren, vatten statistische functies deze samen. De standaardinstallatie van R bevat een breed scala aan statistische functies. In deze handleiding zullen we de belangrijkste kort bespreken.

Basisstatistische functies

Operator Beschrijving
gemiddelde(x) Gemiddelde van x
mediaan(x) Mediaan van x
var(x) Variantie van x
sd(x) Standaardafwijking van x
schaal(x) Standaardscores (z-scores) van x
kwantiel(x) De kwartielen van x
samenvatting(x) Samenvatting van x: gemiddelde, min, max etc..
speed <- dt$speed
speed
# Mean speed of cars dataset
mean(speed)

Output:

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

Output:

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

Output:

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

Output:

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

Output:

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

Output:

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

Output:

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

Tot nu toe hebben we veel ingebouwde R-functies geleerd.

NoteWees voorzichtig met de klasse van het argument, oftewel numeriek, Booleaans of tekenreeks. Als we bijvoorbeeld een tekenreeks willen doorgeven, moeten we de tekenreeks tussen aanhalingstekens plaatsen: "ABC".

Schrijffunctie in R

Soms moeten we onze eigen functie schrijven omdat we een bepaalde taak moeten uitvoeren en er geen kant-en-klare functie bestaat. Een door de gebruiker gedefinieerde functie houdt in dat we een bepaalde taak zelf moeten uitvoeren. naam, argumenten en lichaam.

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

Note: Het is een goede gewoonte om een โ€‹โ€‹door de gebruiker gedefinieerde functie een andere naam te geven dan een ingebouwde functie. Het voorkomt verwarring.

Eรฉn argumentfunctie

In het volgende fragment definiรซren we een eenvoudige vierkante functie. De functie accepteert een waarde en retourneert het kwadraat van de waarde.

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

Code Uitleg

  • De functie heet vierkante_functie; het kan worden genoemd wat we willen.
  • Het ontvangt een argument โ€œnโ€. Wij heeft het type variabele niet gespecificeerd, zodat de gebruiker een geheel getal, een vector of een matrix kan doorgeven
  • De functie neemt de invoer โ€œnโ€ en retourneert het kwadraat van de invoer. Wanneer u klaar bent met het gebruik van de functie, kunnen we deze verwijderen met de functie rm().

# nadat u de functie hebt gemaakt

rm(square_function)
square_function

Op de console kunnen we een foutmelding zien: Error: object 'square_function' not found, wat aangeeft dat de functie niet bestaat.

Milieu Scoping

In R, de omgeving houden Een dataframe is een verzameling objecten zoals functies, variabelen, dataframes, enzovoort.

R opent een omgeving telkens wanneer RStudio wordt gestart.

De beschikbare omgeving op het hoogste niveau is de mondiale milieu, genaamd R_GlobalEnv. En we hebben de Lokale omgeving.

We kunnen de inhoud van de huidige omgeving vermelden.

ls(environment())

uitgang

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

U kunt alle variabelen en functies zien die zijn gemaakt in R_GlobalEnv.

De bovenstaande lijst kan voor u variรซren, afhankelijk van de historische code die u in RStudio uitvoert.

Merk op dat nHet argument van de functie square_function bevindt zich niet in deze globale omgeving.

Voor elke functie wordt een nieuwe omgeving gecreรซerd. In het bovenstaande voorbeeld creรซert de functie square_function() een nieuwe omgeving binnen de mondiale milieu.

Om het verschil tussen te verduidelijken globaal en lokaal Laten we, om de omgeving te begrijpen, het volgende voorbeeld bekijken.

Deze functie neemt een waarde x als argument en voegt deze toe aan de y-definitie buiten en binnen de functie

Functie f die gebruikmaakt van de variabele y die is gedefinieerd in de globale omgeving.

De functie f retourneert de uitvoer 15. Dit komt omdat y is gedefinieerd in de mondiale omgeving. Elke variabele die in de globale omgeving is gedefinieerd, kan lokaal worden gebruikt. De variabele y heeft bij alle functieaanroepen de waarde 10 en is op elk moment toegankelijk.

Laten we eens kijken wat er gebeurt als de variabele y binnen de functie wordt gedefinieerd.

We moeten `y` verwijderen voordat we deze code kunnen uitvoeren met rm r

Functie f die y definieert binnen zijn eigen lokale omgeving

De uitvoer is ook 15 als we f(5) aanroepen, maar geeft een foutmelding als we de waarde y proberen af โ€‹โ€‹te drukken. De variabele y bevindt zich niet in de mondiale omgeving.

Ten slotte gebruikt R de meest recente variabeledefinitie om door te geven in de body van een functie. Laten we het volgende voorbeeld bekijken:

R gebruikt de meest interne definitie van y binnen de functiebody.

R negeert de y-waarden die buiten de functie zijn gedefinieerd, omdat we expliciet een variabele binnen de hoofdtekst van de functie hebben gemaakt.

Functie voor meerdere argumenten

We kunnen een functie schrijven met meer dan รฉรฉn argument. Beschouw de functie genaamd โ€œtijdenโ€. Het is een eenvoudige functie die twee variabelen vermenigvuldigt.

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

Output:

## [1] 8

Wanneer moeten we functie schrijven?

Datawetenschappers moeten veel repetitieve taken uitvoeren. Meestal kopiรซren en plakken we steeds opnieuw stukken code. Het normaliseren van een variabele is bijvoorbeeld sterk aanbevolen voordat we een query uitvoeren. machine learning algoritme. De formule om een โ€‹โ€‹variabele te normaliseren is:

Formule om een โ€‹โ€‹variabele te normaliseren

We weten al hoe we de functies min() en max() in R moeten gebruiken. We gebruiken de tibble-bibliotheek om het dataframe te maken. Tibble is tot nu toe de handigste functie om een โ€‹โ€‹dataset helemaal opnieuw te creรซren.

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

We gaan in twee stappen te werk om de hierboven beschreven functie te berekenen. In de eerste stap maken we een variabele aan met de naam c1_norm, die de herschaling van c1 vertegenwoordigt. In de tweede stap kopiรซren en plakken we de code van c1_norm en vervangen we c2 en c3.

Detail van de functie met de kolom c1:

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

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

Daarom kunnen we ze verdelen om de genormaliseerde waarde van kolom c1 te krijgen:

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

We kunnen c1_norm, c2_norm en c3_norm creรซren:

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)

Output:

## [1] 0.3400113 0.4198788 0.8524394 0.4925860 0.5067991

Het werkt. We kunnen kopiรซren en plakken

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

verander vervolgens c1_norm in c2_norm en c1 in c2. We doen hetzelfde om c3_norm te creรซren

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

We hebben de variabelen c1, c2 en c3 perfect opnieuw geschaald.

Deze methode is echter foutgevoelig. We zouden kunnen kopiรซren en vergeten de kolomnaam aan te passen na het plakken. Daarom is het een goede gewoonte om een โ€‹โ€‹functie te schrijven telkens wanneer je dezelfde code meer dan twee keer moet plakken. We kunnen de code herschikken in een formule en deze aanroepen wanneer dat nodig is. Om onze eigen functie te schrijven, moeten we het volgende invoeren:

  • Naam: normaliseren.
  • het aantal argumenten: We hebben slechts รฉรฉn argument nodig, namelijk de kolom die we gebruiken in onze berekening.
  • Het lichaam: dit is simpelweg de formule die we willen teruggeven.

We gaan stap voor stap te werk om de functie normaliseren te creรซren.

Stap 1) We maken de teller, namelijk x โ€“ min(x). In R kunnen we de teller in een variabele opslaan, bijvoorbeeld zo:

nominator <- x-min(x)

Stap 2) We berekenen de noemer: max(x) โ€“ min(x). We kunnen het idee van stap 1 herhalen en de berekening in een variabele opslaan:

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

Stap 3) We voeren de scheiding uit tussen de teller en de noemer.

normalize <- nominator/denominator

Stap 4) Om waarde terug te geven aan de aanroepende functie moeten we normalize doorgeven aan return() om de uitvoer van de functie te krijgen.

return(normalize)

Stap 5) We zijn klaar om de functie te gebruiken door deze in te pakken.ping Alles binnen de haakjes.

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

Laten we onze functie testen met de variabele c1:

normalize(data_frame$c1)

Het werkt perfect. We hebben onze eerste functie gemaakt.

Een functie is een uitgebreidere manier om een โ€‹โ€‹repetitieve taak uit te voeren. We kunnen de normalisatieformule toepassen op verschillende kolommen, zoals hieronder:

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)

Hoewel het voorbeeld eenvoudig is, kunnen we de kracht van een formule hieruit afleiden. De bovenstaande code is gemakkelijker te lezen en voorkomt fouten die kunnen ontstaan โ€‹โ€‹bij het plakken van code.

Functies met voorwaarde

De functie normalize() doet altijd hetzelfde. Soms moeten we voorwaarden aan een functie toevoegen om ervoor te zorgen dat de code verschillende resultaten retourneert.

Bij Machine Learning-taken moeten we de dataset splitsen tussen een treinset en een testset. Dankzij het treinstel kan het algoritme leren van de gegevens. Om de prestaties van ons model te testen, kunnen we de testset gebruiken om de prestatiemaatstaf terug te geven. R heeft geen functie om twee datasets te creรซren. We kunnen daarvoor onze eigen functie schrijven. Onze functie heeft twee argumenten nodig en heet split_data(). Het idee hierachter is eenvoudig: we vermenigvuldigen de lengte van de dataset (dat wil zeggen het aantal observaties) met 0.8. Als we bijvoorbeeld de dataset 80/20 willen splitsen, en onze dataset bevat 100 rijen, dan vermenigvuldigt onze functie 0.8*100 = 80. Er worden 80 rijen geselecteerd om onze trainingsgegevens te worden.

We zullen de luchtkwaliteitsdataset gebruiken om onze door de gebruiker gedefinieerde functie te testen. De luchtkwaliteitdataset bestaat uit 153 rijen. We kunnen het zien met de onderstaande code:

nrow(airquality)

Output:

## [1] 153

Wij gaan als volgt te werk:

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

Onze functie heeft twee argumenten. De argumenten train is een Booleaanse parameter. Als deze is ingesteld op TRUE, maakt onze functie de train-dataset, anders maakt deze de test-dataset.

We kunnen te werk gaan zoals we deden met de normalize()-functie. We schrijven de code alsof het eenmalige code is en plaatsen vervolgens alles met de voorwaarde in de body om de functie te creรซren.

Stap 1:

We moeten de lengte van de dataset berekenen. Dit gebeurt met de functie nrow(). Nrow retourneert het totale aantal rijen in de gegevensset. We noemen de variabele lengte.

length<- nrow(airquality)
length

Output:

## [1] 153

Stap 2:

We vermenigvuldigen de lengte met 0.8. Het retourneert het aantal te selecteren rijen. Het moet 153*0.8 = 122.4 zijn

total_row <- length*0.8
total_row

Output:

## [1] 122.4

We willen 122 rijen selecteren uit de 153 rijen in de luchtkwaliteitsdataset. We maken een lijst met waarden van 1 tot total_row. Het resultaat slaan we op in de variabele genaamd split

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

Output:

## [1] 1 2 3 4 5

split kiest de eerste 122 rijen uit de dataset. We kunnen bijvoorbeeld zien dat onze variabele splitsing de waarden 1, 2, 3, 4, 5 enzovoort verzamelt. Deze waarden zullen de index zijn wanneer we de rijen selecteren die moeten worden geretourneerd.

Stap 3:

We moeten de rijen in de luchtkwaliteitsgegevensset selecteren op basis van de waarden die zijn opgeslagen in de gesplitste variabele. Dit wordt als volgt gedaan:

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

Output:

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

Stap 4:

We kunnen de testgegevensset maken door de resterende rijen te gebruiken, 123:153. Dit wordt gedaan door โ€“ vรณรณr de splitsing te gebruiken.

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

Output:

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

Stap 5:

We kunnen de voorwaarde binnen de hoofdtekst van de functie creรซren. Houd er rekening mee dat we een argumenttrein hebben die standaard een Booleaanse waarde heeft die is ingesteld op TRUE om de treinset te retourneren. Om de voorwaarde te creรซren, gebruiken we de if-syntaxis:

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

Dit is het, we kunnen de functie schrijven. We hoeven de luchtkwaliteit alleen maar te veranderen in df, omdat we onze functie op iedereen willen uitproberen dataframe, niet alleen luchtkwaliteit:

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

Laten we onze functie eens uitproberen op de dataset met luchtkwaliteitsgegevens. We zouden een trainingsset met 122 rijen en een testset met 31 rijen moeten hebben.

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

Output:

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

Output:

## [1] 31  6

Veelgestelde vragen

Wijs een waarde toe in de definitie, bijvoorbeeld function(df, train = TRUE). Als de aanroeper dit argument weglaat, gebruikt R de standaardwaarde. Standaardwaarden worden pas geรซvalueerd wanneer ze nodig zijn, dus een standaardwaarde kan zelfs verwijzen naar een ander argument van dezelfde functie.

Ja. Een functie mag zichzelf aanroepen zolang er een stopteken is.ping Een voorwaarde beรซindigt de keten โ€” bijvoorbeeld een faculteit die 1 retourneert wanneer n 1 bereikt. Diepe recursie kan de limiet voor geneste expressies bereiken, waardoor iteratie vaak veiliger is.

Nee. R retourneert automatisch de waarde van de laatst geรซvalueerde expressie, daarom werkt square_function() zonder return(). Gebruik return() wanneer een vroegtijdige exit nodig is, of wanneer een expliciet resultaat de functie leesbaarder maakt.

R zoekt eerst op exacte naam, dan op gedeeltelijke naam en vervolgens op positie voor wat er overblijft. Door argumenten expliciet te benoemen, zoals in seq(45, 55, by = 1), blijft een aanroep leesbaar en beschermd tegen onbedoelde herschikking.

Een functie die is aangemaakt zonder dat er een naam aan is toegekend, meestal rechtstreeks doorgegeven aan sapply() of lapply(). R 4.1 heeft een verkorte backslash-vorm toegevoegd, waardoor \(x) x^2 hetzelfde doet als function(x) x^2, maar dan veel minder tijdrovend.ping.

De nieuwe definitie maskeert de ingebouwde versie binnen die omgeving, waardoor het aanroepen van length() jouw versie kan uitvoeren in plaats van de basisversie. Verwijder de kopie met rm(), of kies vanaf het begin een andere naam.

AI-assistenten stellen functiestructuren op aan de hand van een eenvoudig commentaar, suggereren verstandige standaardwaarden voor argumenten en genereren unit-tests. Voer de gegenereerde code altijd uit met echte data, want een plausibel ogende R-functie kan nog steeds stilletjes onjuiste waarden retourneren.

Ja. RStudio Desktopversie 2023.09.0 en later bevat een opt-in-optie. GitHub-copiloot Integratie. Het vult functiebody's aan op basis van een opmerking, maar controleer elke suggestie, aangezien het uw gegevens niet kan inzien.

Vat dit bericht samen met: