Fehler in <meinem Code>: Objekt vom Typ 'Closure' kann nicht untergeordnet werden

110

Endlich konnte ich den Code für mein Scraping ausarbeiten . Es schien gut zu funktionieren und als ich es dann wieder ausführte, bekam ich plötzlich die folgende Fehlermeldung:

Error in url[i] = paste("http://en.wikipedia.org/wiki/", gsub(" ", "_",  : 
  object of type 'closure' is not subsettable

Ich bin mir nicht sicher warum, da ich nichts an meinem Code geändert habe.

Bitte beraten.

library(XML)
library(plyr)

names <- c("George Clooney", "Kevin Costner", "George Bush", "Amar Shanghavi")

for(i in 1:length(names)) {
    url[i] = paste('http://en.wikipedia.org/wiki/', gsub(" ","_", names[i]) , sep="")

    # some parsing code
}
user1496289
quelle
3
Auch kommt es vor , wie in meinem Fall, wenn Sie nur versehentlich geben []statt ()!
Ehsan88

Antworten:

118

Im Allgemeinen bedeutet diese Fehlermeldung, dass Sie versucht haben, die Indizierung für eine Funktion zu verwenden. Sie können diese Fehlermeldung beispielsweise mit reproduzieren

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

Der in der Fehlermeldung erwähnte Abschluss ist (lose) die Funktion und die Umgebung, in der die Variablen beim Aufruf der Funktion gespeichert werden.


In diesem speziellen Fall versuchen Sie, wie Joshua erwähnt hat, auf die urlFunktion als Variable zuzugreifen . Wenn Sie eine Variable mit dem Namen definieren url, verschwindet der Fehler.

Aus bewährten Gründen sollten Sie normalerweise vermeiden, Variablen nach Base-R-Funktionen zu benennen. (Das Aufrufen von Variablen dataist eine häufige Ursache für diesen Fehler.)


Es gibt mehrere verwandte Fehler beim Versuch, Operatoren oder Schlüsselwörter zu unterteilen.

`+`[1]
## Error in `+`[1] : object of type 'builtin' is not subsettable
`if`[1]
## Error in `if`[1] : object of type 'special' is not subsettable

Wenn Sie in auf dieses Problem stoßen shiny, ist die wahrscheinlichste Ursache, dass Sie versuchen, mit einem reactiveAusdruck zu arbeiten, ohne ihn als Funktion in Klammern aufzurufen.

library(shiny)
reactive_df <- reactive({
    data.frame(col1 = c(1,2,3),
               col2 = c(4,5,6))
})

Während wir oft mit reaktiven Ausdrücken arbeiten, die glänzend sind, als wären sie Datenrahmen, sind sie tatsächlich Funktionen , die Datenrahmen (oder andere Objekte) zurückgeben.

isolate({
    print(reactive_df())
    print(reactive_df()$col1)
})
  col1 col2
1    1    4
2    2    5
3    3    6
[1] 1 2 3

Wenn wir jedoch versuchen, es ohne Klammern zu unterteilen, versuchen wir tatsächlich, eine Funktion zu indizieren, und es wird eine Fehlermeldung angezeigt:

isolate(
    reactive_df$col1
)
Error in reactive_df$col1 : object of type 'closure' is not subsettable
Richie Cotton
quelle
35

Sie definieren den Vektor nicht url, bevor Sie versuchen, ihn zu unterteilen. urlist auch eine Funktion im Basispaket, also url[i]wird versucht, diese Funktion zu unterteilen ... was keinen Sinn ergibt.

Sie haben wahrscheinlich urlin Ihrer vorherigen R-Sitzung definiert, aber vergessen, diesen Code in Ihr Skript zu kopieren.

Joshua Ulrich
quelle
1

Im Falle dieses ähnlichen Fehlers Warnung: Fehler in $: Objekt vom Typ 'Closure' ist nicht untergeordnet [Keine Stapelverfolgung verfügbar]

Fügen Sie einfach den entsprechenden Paketnamen mit :: z

anstelle von Tags (....)

schreibe shiny :: tags (....)

Abhishek
quelle
0

Ich hatte dieses Problem beim Versuch, ein UI-Element innerhalb eines reaktiven Ereignisses zu entfernen:

myReactives <- eventReactive(input$execute, {
    ... # Some other long running function here
    removeUI(selector = "#placeholder2")
})

Ich habe diesen Fehler erhalten, aber nicht in der removeUI-Elementzeile, sondern aus irgendeinem Grund im nächsten Beobachter. Durch Entfernen der removeUI-Methode aus eventReactive und Platzieren an einer anderen Stelle wurde dieser Fehler für mich behoben.

TheMooCows237
quelle
-5

Ich denke du wolltest es tun url[i] <- paste(...

statt url[i] = paste(.... Wenn ja, ersetzen Sie =durch <-.

jmz
quelle