2012-07-03 81 views
79

我終於能夠編寫出my scraping的代碼。這似乎是工作的罰款,然後突然當我再次運行它,我得到了以下錯誤消息:錯誤<my code>:'closure'類型的對象不是子集合

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

我不知道爲什麼,我什麼也沒有改變我的代碼。

請指教。

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

此外,它發生在我的情況,當你只是錯誤地鍵入'[]'而不是'()'! – ehsan88

回答

30

在嘗試對其進行子集化之前,您未定義矢量urlurl也是基本包中的一個函數,所以url[i]正試圖對該函數進行子集化......這是沒有意義的。

您可能在之前的R會話中定義了url,但忘記將該代碼複製到腳本中。

71

一般來說,這個錯誤信息意味着你已經嘗試在函數上使用索引。您可以複製此錯誤消息,例如

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 

錯誤消息中提到的關閉是(寬鬆)的功能和存儲變量時,函數被調用的環境。


在這種特殊情況下,如約書亞所提到的,您試圖訪問url功能作爲一個變量。如果您定義名爲url的變量,則錯誤消失。

作爲一個良好的做法,通常應避免在base-R函數之後命名變量。 (調用變量data是這個錯誤的常見原因。)


有用於試圖子集運營商或幾個關鍵字相關的錯誤。

`+`[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

我想你的意思做url[i] <- paste(...

,而不是url[i] = paste(...。如果這樣用<-代替=

相關問題