2012-07-03 5 views
79

Sono finalmente riuscito a calcolare il codice per my scraping. Sembrava funzionare bene e poi tutto ad un tratto, quando mi sono imbattuto di nuovo, ho ottenuto il seguente messaggio di errore:Errore in <my code>: l'oggetto di tipo "chiusura" non è sottomabile

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

io non sono sicuro perché come ho cambiato nulla nel mio codice.

Si prega di avvisare.

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 
} 
+3

Inoltre si verifica, come nel mio caso, quando si digita erroneamente '[]' invece di '()'! – ehsan88

risposta

30

Non definire il vettore, url, prima di provare a suddividerlo. url è anche una funzione nel pacchetto base, quindi url[i] sta tentando di suddividere quella funzione ... che non ha senso.

Probabilmente hai definito url nella tua precedente sessione R, ma hai dimenticato di copiare quel codice nel tuo script.

71

In generale questo messaggio di errore indica che si è tentato di utilizzare l'indicizzazione su una funzione. È possibile riprodurre questo messaggio di errore, ad esempio

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 chiusura menzionato nel messaggio di errore è (vagamente) la funzione e l'ambiente che memorizza le variabili quando viene chiamata la funzione.


In questo caso specifico, come detto Joshua, si sta tentando di accedere alla funzione url come una variabile. Se si definisce una variabile denominata url, l'errore scompare.

È buona norma evitare di denominare le variabili dopo le funzioni di base-R. (Calling variabili data è una fonte comune di questo errore.)


Ci sono diversi errori correlati per cercare di sottoinsieme operatori o le parole chiave.

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

penso che si intende fare url[i] <- paste(...

invece di url[i] = paste(.... In tal caso, sostituire = con <-.

Problemi correlati