Error en <mi código>: el objeto de tipo 'cierre' no se puede subconfigurar

Resuelto user1496289 asked hace 54 años • 0 respuestas

Finalmente pude descifrar el código para mi scraping . Parecía estar funcionando bien y de repente, cuando lo ejecuté nuevamente, recibí el siguiente mensaje de error:

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

No estoy seguro de por qué ya que no cambié nada en mi código.

Por favor avise.

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 avatar Jan 01 '70 08:01 user1496289
Aceptado

En general, este mensaje de error significa que ha intentado utilizar la indexación en una función. Puede reproducir este mensaje de error con, por ejemplo

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

El cierre mencionado en el mensaje de error es (a grandes rasgos) la función y el entorno que almacena las variables cuando se llama a la función.


En este caso específico, como mencionó Joshua, está intentando acceder a la urlfunción como una variable. Si define una variable llamada url, el error desaparece.

Como buena práctica, normalmente se debe evitar nombrar variables después de funciones base-R. (La llamada a variables dataes una fuente común de este error).


Hay varios errores relacionados al intentar crear subconjuntos de operadores o palabras clave.

`+`[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 tiene este problema en shiny, la causa más probable es que esté intentando trabajar con una reactiveexpresión sin llamarla como una función usando paréntesis.

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

Si bien a menudo trabajamos con expresiones reactivas en shiny como si fueran marcos de datos, en realidad son funciones que devuelven marcos de datos (u otros objetos).

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

Pero si intentamos crear un subconjunto sin paréntesis, en realidad estamos intentando indexar una función y obtenemos un error:

isolate(
    reactive_df$col1
)
Error in reactive_df$col1 : object of type 'closure' is not subsettable
Richie Cotton avatar Jul 03 '2012 10:07 Richie Cotton

No define el vector, urlantes de intentar crear un subconjunto. urlTambién es una función en el paquete base, por lo que url[i]intentar crear un subconjunto de esa función... lo cual no tiene sentido.

Probablemente lo definiste urlen tu sesión anterior de R, pero olvidaste copiar ese código en tu script.

Joshua Ulrich avatar Jul 03 '2012 10:07 Joshua Ulrich

En caso de este error similar Advertencia: Error en $: el objeto de tipo 'cierre' no se puede subconfigurar [No hay seguimiento de pila disponible]

Simplemente agregue el nombre del paquete correspondiente usando ::, por ejemplo

en lugar de etiquetas (....)

escribir brillante::etiquetas(....)

Abhishek avatar Oct 03 '2019 12:10 Abhishek