Comment gérer dans R : objet de type « fermeture » n’est pas sous-définissable



Une erreur que vous pouvez rencontrer dans R est :

object of type 'closure' is not subsettable

Cette erreur se produit lorsque vous tentez de sous-ensembler une fonction.

Dans R, il est possible de sous-ensembler des listes, des vecteurs, des matrices et des trames de données, mais une fonction a le type « fermeture » qui ne peut pas être sous-ensemble.

Ce didacticiel explique exactement comment résoudre cette erreur.

Comment reproduire l’erreur

Supposons que nous créions la fonction suivante dans R qui prend chaque valeur d’un vecteur et la multiplie par 5 :

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

Voici comment nous pourrions utiliser cette fonction en pratique :

#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

Notez que chaque valeur du vecteur d’origine a été multipliée par 5.

Supposons maintenant que nous essayions de sous-ensembler la fonction :

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

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

Nous recevons une erreur car il n’est pas possible de sous-ensembler un objet de type « fermeture » dans R.

On peut utiliser la syntaxe suivante pour vérifier que la fonction est bien du type ‘closure’ :

#print object type of function
typeof(cool_function)

[1] "closure"

Plus d’exemples d’objets « Fermeture »

Toute fonction dans R est du type « fermeture ». Par exemple, nous recevrions cette erreur si nous tentions de sous-ensembler n’importe quelle fonction dans la base R :

#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

Comment résoudre l’erreur

La façon de résoudre cette erreur consiste simplement à éviter de sous-définir une fonction.

Par exemple, si nous souhaitons appliquer notre fonction cool_function précédente uniquement au premier élément d’un vecteur, nous pouvons utiliser la syntaxe suivante :

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

[1] 10

Nous ne recevons pas d’erreur car nous avons sous-ensemble le vecteur au lieu de la fonction.

Ou nous pourrions appliquer la fonction cool_function à l’ensemble du vecteur :

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

[1] 10 15 15 20 25 25 30 45

Nous ne recevons pas d’erreur car nous n’avons en aucun cas tenté de sous-ensembler la fonction.

Ressources additionnelles

Les didacticiels suivants expliquent comment résoudre d’autres erreurs courantes dans R :

Comment réparer : la condition a une longueur > 1 et seul le premier élément sera utilisé
Comment réparer dans R : dim(X) doit avoir une longueur positive
Comment réparer dans R : valeur manquante là où vrai/faux est nécessaire
Comment réparer : les NA introduites par la coercition

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *