Come gestire in r: l'oggetto di tipo "chiusura" non è sottodefinibile


Un errore che potresti riscontrare in R è:

 object of type 'closure' is not subsettable

Questo errore si verifica quando si tenta di creare un sottoinsieme di una funzione.

In R è possibile sottoinsieme liste, vettori, matrici e frame di dati, ma una funzione ha tipo “chiusura” che non può essere sottoinsieme.

Questo tutorial spiega esattamente come risolvere questo errore.

Come riprodurre l’errore

Supponiamo di creare la seguente funzione in R che prende ogni valore di un vettore e lo moltiplica per 5:

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

Ecco come potremmo utilizzare questa funzione nella pratica:

 #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

Nota che ogni valore del vettore originale è stato moltiplicato per 5.

Supponiamo ora di provare a sottoimpostare la funzione:

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

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

Riceviamo un errore perché non è possibile sottoimpostare un oggetto di tipo “chiusura” in R.

Possiamo utilizzare la seguente sintassi per verificare che la funzione sia effettivamente di tipo ‘chiusura’:

 #print object type of function
typeof(cool_function)

[1] “closure”

Altri esempi di oggetti “Chiusura”.

Ogni funzione in R è di tipo “chiusura”. Ad esempio, riceveremmo questo errore se provassimo a creare un sottoinsieme di qualsiasi funzione nella 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

Come risolvere l’errore

Il modo per risolvere questo errore è semplicemente evitare di sottodefinire una funzione.

Ad esempio, se vogliamo applicare la nostra precedente funzione cool_function solo al primo elemento di un vettore, possiamo utilizzare la seguente sintassi:

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

[1] 10

Non riceviamo un errore perché sottoinseriamo il vettore invece della funzione.

Oppure potremmo applicare cool_function all’intero vettore:

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

[1] 10 15 15 20 25 25 30 45

Non riceviamo un errore perché non abbiamo tentato di creare un sottoinsieme della funzione in alcun modo.

Risorse addizionali

I seguenti tutorial spiegano come risolvere altri errori comuni in R:

Come risolvere il problema: la condizione ha lunghezza > 1 e verrà utilizzato solo il primo elemento
Come risolvere in R: dim(X) deve avere una lunghezza positiva
Come risolvere in R: valore mancante dove è necessario vero/falso
Come risolvere: NA introdotte dalla coercizione

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *