Hoe om te gaan met r: object van het type "sluiting" is niet subdefinieerbaar


Een fout die je tegen kunt komen in R is:

 object of type 'closure' is not subsettable

Deze fout treedt op wanneer u probeert een functie in te delen.

In R is het mogelijk om lijsten, vectoren, matrices en dataframes in subsets te plaatsen, maar een functie heeft het type „closure“ dat niet kan worden subset.

In deze tutorial wordt precies uitgelegd hoe u deze fout kunt oplossen.

Hoe de fout te reproduceren

Stel dat we de volgende functie in R creëren die elke waarde van een vector neemt en deze met 5 vermenigvuldigt:

 #define function
cool_function <- function (x) {
  x <- x*5
  return (x)
}

Zo kunnen we deze functie in de praktijk gebruiken:

 #define data
data <- c(2, 3, 3, 4, 5, 5, 6, 9)

#apply function to data
cool_function(data)

[1] 10 15 15 20 25 25 30 45

Merk op dat elke waarde van de originele vector met 5 is vermenigvuldigd.

Stel nu dat we proberen de functie onder te verdelen:

 #attempt to get first element of function
cool_function[1]

Error in cool_function[1]: object of type 'closure' is not subsettable

We ontvangen een foutmelding omdat het niet mogelijk is om een object van het type „sluiting“ in R onder te verdelen.

We kunnen de volgende syntaxis gebruiken om te controleren of de functie inderdaad van het type ‚afsluiting‘ is:

 #print object type of function
typeof(cool_function)

[1] “closure”

Meer voorbeelden van “Sluiting”-objecten

Elke functie in R is van het type “afsluiting”. We zouden deze foutmelding bijvoorbeeld ontvangen als we probeerden een functie in de R-basis in te delen:

 #attempt to subset mean function
mean[1]

Error in mean[1]: object of type 'closure' is not subsettable

#attempt to subset standard deviation function
sd[1]

Error in sd[1]: object of type 'closure' is not subsettable

#attempt to subset table function
tabld[1]

Error in table[1]: object of type 'closure' is not subsettable

Hoe u de fout kunt oplossen

De manier om deze fout op te lossen is door simpelweg te voorkomen dat een functie te weinig wordt gedefinieerd.

Als we bijvoorbeeld onze vorige cool_function alleen op het eerste element van een vector willen toepassen, kunnen we de volgende syntaxis gebruiken:

 #apply function to just first element in vector
cool_function(data[1])

[1] 10

We krijgen geen foutmelding omdat we de vector in plaats van de functie onderverdelen.

Of we kunnen de cool_function op de gehele vector toepassen:

 #apply function to every element in vector
cool_function(data)

[1] 10 15 15 20 25 25 30 45

We ontvangen geen foutmelding omdat we op geen enkele manier hebben geprobeerd de functie in te delen.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:

Oplossing: voorwaarde heeft lengte > 1 en alleen het eerste element wordt gebruikt
Hoe op te lossen in R: dim(X) moet een positieve lengte hebben
Hoe op te lossen in R: ontbrekende waarde waar waar/onwaar nodig is
Oplossing: NA’s geïntroduceerd door dwang

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert