Fout in <mijn code> : object van het type ‘sluiting’ kan niet worden ingesteld

Ik heb eindelijk de code kunnen vinden voor mijn scraping. Het leek goed te werken en toen ik het opeens opnieuw uitvoerde, kreeg ik de volgende foutmelding:

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

Ik weet niet zeker waarom, want ik heb niets in mijn code veranderd.

Graag advies.

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
}

Antwoord 1, autoriteit 100%

Over het algemeen betekent dit foutbericht dat u heeft geprobeerd indexering voor een functie te gebruiken. U kunt deze foutmelding reproduceren met bijvoorbeeld

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

De sluiting die in de foutmelding wordt genoemd, is (losjes) de functie en de omgeving die de variabelen opslaat wanneer de functie wordt aangeroepen.


In dit specifieke geval, zoals Joshua al zei, probeert u toegang te krijgen tot de url functie als een variabele. Als u een variabele met de naam url definieert, verdwijnt de fout.

Als een goede gewoonte, moet u gewoonlijk vermijden variabelen te benoemen na basis-R-functies. (Het aanroepen van variabelen data is een veelvoorkomende bron hiervan fout.)


Er zijn verschillende gerelateerde fouten bij het subsetten van operators of trefwoorden.

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

Als je dit probleem tegenkomt in shiny, is de meest waarschijnlijke oorzaak dat je probeert te werken met een reactive-expressie zonder deze als functie aan te roepen haakjes gebruiken.

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

Hoewel we vaak werken met reactieve expressies in glanzend alsof het dataframes zijn, zijn het in feite functies die dataframes (of andere objecten) retourneren.

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

Maar als we het proberen te subsetten zonder haakjes, dan proberen we eigenlijk een functie te indexeren en krijgen we een foutmelding:

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

Antwoord 2, autoriteit 28%

U definieert de vector, url, niet voordat u deze probeert te subsetten. url is ook een functie in het basispakket, dus url[i] probeert die functie te subsetten… wat niet logisch is.

Je hebt waarschijnlijk url gedefinieerd in je vorige R-sessie, maar bent vergeten die code naar je script te kopiëren.


Antwoord 3

In het geval van deze soortgelijke fout
Waarschuwing: fout in $: object van het type ‘sluiting’ kan niet worden ingesteld
[Geen stacktracering beschikbaar]

Voeg gewoon de bijbehorende pakketnaam toe met ::
bijv.

in plaats van tags(….)

schrijven
glanzend::tags(….)


Antwoord 4

Ik had dit probleem bij het verwijderen van een ui-element in een reactieve gebeurtenis:

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

Ik kreeg deze foutmelding, maar niet op de removeUI-elementregel, het was om de een of andere reden in de volgende waarnemer. Door de removeUI-methode uit de eventReactive te halen en deze ergens anders te plaatsen, werd deze fout voor mij verwijderd.


Antwoord 5

Het kan een ongedefinieerde variabele betekenen.


Antwoord 6

Ik denk dat je van plan was om url[i] <- paste(...

te doen)

in plaats van url[i] = paste(.... Zo ja, vervang = door <-.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes