Vorgehensweise in r: objekt vom typ „abschluss“ ist nicht unterdefinierbar


Ein Fehler, der in R auftreten kann, ist:

 object of type 'closure' is not subsettable

Dieser Fehler tritt auf, wenn Sie versuchen, eine Teilmenge einer Funktion zu erstellen.

In R ist es möglich, Listen, Vektoren, Matrizen und Datenrahmen zu unterteilen, aber eine Funktion hat den Typ „Abschluss“, der nicht untergeordnet werden kann.

In diesem Tutorial wird genau erklärt, wie Sie diesen Fehler beheben können.

So reproduzieren Sie den Fehler

Angenommen, wir erstellen in R die folgende Funktion, die jeden Wert eines Vektors nimmt und ihn mit 5 multipliziert:

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

So könnten wir diese Funktion in der Praxis nutzen:

 #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

Beachten Sie, dass jeder Wert des Originalvektors mit 5 multipliziert wurde.

Nehmen wir nun an, wir versuchen, eine Teilmenge der Funktion zu bilden:

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

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

Wir erhalten eine Fehlermeldung, weil es in R nicht möglich ist, ein Objekt vom Typ „Abschluss“ zu unterteilen.

Wir können die folgende Syntax verwenden, um zu überprüfen, ob die Funktion tatsächlich vom Typ „Abschluss“ ist:

 #print object type of function
typeof(cool_function)

[1] “closure”

Weitere Beispiele für „Closure“-Objekte

Jede Funktion in R ist vom Typ „Abschluss“. Beispielsweise würden wir diesen Fehler erhalten, wenn wir versuchen würden, eine Teilmenge einer Funktion in der R-Basis zu bilden:

 #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

So beheben Sie den Fehler

Die Möglichkeit, diesen Fehler zu beheben, besteht einfach darin, eine Unterdefinition einer Funktion zu vermeiden.

Wenn wir beispielsweise unsere vorherige cool_function nur auf das erste Element eines Vektors anwenden möchten, können wir die folgende Syntax verwenden:

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

[1] 10

Wir erhalten keine Fehlermeldung, da wir den Vektor anstelle der Funktion unterteilen.

Oder wir könnten die cool_function auf den gesamten Vektor anwenden:

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

[1] 10 15 15 20 25 25 30 45

Wir erhalten keine Fehlermeldung, da wir nicht versucht haben, die Funktion in irgendeiner Weise zu unterteilen.

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in R beheben können:

Lösung: Die Bedingung hat eine Länge > 1 und nur das erste Element wird verwendet
So beheben Sie das Problem in R: dim(X) muss eine positive Länge haben
So beheben Sie in R: Fehlender Wert, bei dem wahr/falsch benötigt wird
So beheben Sie das Problem: Durch Zwang eingeführte NAs

Einen Kommentar hinzufügen

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