Jak obsługiwać w r: obiekt typu „zamknięcie” nie jest subdefiniowalny


Błąd, który możesz napotkać w R to:

 object of type 'closure' is not subsettable

Ten błąd występuje przy próbie podzielenia funkcji na podzbiór.

W R możliwe jest podzbiór list, wektorów, macierzy i ramek danych, ale funkcja ma typ „zamknięcie”, którego nie można podzbiorać.

W tym samouczku dokładnie wyjaśniono, jak rozwiązać ten błąd.

Jak odtworzyć błąd

Załóżmy, że tworzymy w R następującą funkcję, która pobiera każdą wartość wektora i mnoży ją przez 5:

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

Oto jak moglibyśmy wykorzystać tę funkcję w praktyce:

 #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

Należy zauważyć, że każda wartość pierwotnego wektora została pomnożona przez 5.

Załóżmy teraz, że próbujemy podzielić funkcję na podzbiór:

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

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

Otrzymujemy błąd, ponieważ nie jest możliwe podzielenie obiektu typu „closure” w R.

Możemy użyć następującej składni, aby sprawdzić, czy funkcja rzeczywiście jest typu „zamknięcie”:

 #print object type of function
typeof(cool_function)

[1] “closure”

Więcej przykładów obiektów „Zamknięcie”.

Każda funkcja w R jest typu „zamknięcia”. Na przykład otrzymalibyśmy ten błąd, gdybyśmy próbowali podzielić dowolną funkcję w bazie 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

Jak rozwiązać problem

Sposobem na rozwiązanie tego błędu jest po prostu uniknięcie niedodefiniowania funkcji.

Na przykład, jeśli chcemy zastosować naszą poprzednią funkcję cool_function tylko do pierwszego elementu wektora, możemy zastosować następującą składnię:

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

[1] 10

Nie pojawia się błąd, ponieważ zamiast funkcji podstawiamy wektor.

Albo moglibyśmy zastosować funkcję cool_function do całego wektora:

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

[1] 10 15 15 20 25 25 30 45

Nie pojawia się błąd, ponieważ w żaden sposób nie próbowaliśmy podzielić funkcji na podzbiór.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak rozwiązać inne typowe błędy w języku R:

Jak naprawić: warunek ma długość > 1 i zostanie użyty tylko pierwszy element
Jak naprawić w R: dim(X) musi mieć długość dodatnią
Jak naprawić w R: brakująca wartość, gdzie potrzebna jest prawda/fałsz
Jak naprawić: NA wprowadzone przez przymus

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *