web-dev-qa-db-fra.com

Erreur dans <mon code>: l'objet de type 'fermeture' n'est pas sous-utilisable

J'ai finalement été capable de travailler sur le code de ma note . Cela semblait fonctionner correctement et tout à coup, lorsque je l'ai relancé, j'ai reçu le message d'erreur suivant:

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

Je ne sais pas pourquoi car je n'ai rien changé dans mon code.

S'il vous plaît donnez votre avis.

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
}
103
user1496289

En général, ce message d'erreur signifie que vous avez essayé d'utiliser l'indexation sur une fonction. Vous pouvez reproduire ce message d'erreur avec, par exemple

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

La fermeture mentionnée dans le message d'erreur est (vaguement) la fonction et l'environnement qui stocke les variables lorsque la fonction est appelée.


Comme Joshua l’a mentionné, dans ce cas précis, vous essayez d’accéder à la fonction url en tant que variable. Si vous définissez une variable nommée url, l'erreur disparaît.

En règle générale, évitez de nommer des variables après les fonctions base-R. (Appel de variables data est une source courante de cette erreur.)


Il existe plusieurs erreurs liées à la tentative de sous-ensemble d'opérateurs ou de mots-clés.

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

Si vous rencontrez ce problème dans shiny, la cause la plus probable est que vous essayez de travailler avec une expression reactive sans l'appeler en tant que fonction à l'aide de parenthèses.

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

Bien que nous travaillions souvent avec des expressions réactives brillantes comme s'il s'agissait de trames de données, ce sont en fait des fonctions qui renvoient des trames de données (ou d'autres objets).

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

Mais si nous essayons de la subdiviser sans parenthèses, nous essayons en fait d'indexer une fonction et nous obtenons une erreur:

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

Vous ne définissez pas le vecteur, url, avant d'essayer de le subdiviser. url est également une fonction du paquetage de base, donc url[i] tente de sous-définir cette fonction ... ce qui n'a pas de sens.

Vous avez probablement défini url dans votre session précédente, mais vous avez oublié de copier ce code dans votre script.

33
Joshua Ulrich

J'ai eu ce problème essayait de supprimer un élément d'interface utilisateur à l'intérieur d'un événement réactif:

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

Je recevais cette erreur, mais pas sur la ligne de l'élément removeUI, c'était dans l'observateur suivant pour une raison quelconque. Prendre la méthode removeUI dans eventReactive et le placer ailleurs a supprimé cette erreur pour moi.

0
TheMooCows237