2012-07-03 31 views
79

Tôi cuối cùng cũng có thể tìm ra mã cho my scraping. Nó dường như làm việc tốt và sau đó tất cả của một bất ngờ khi tôi chạy nó một lần nữa, tôi nhận được thông báo lỗi sau:Lỗi trong <my code>: đối tượng thuộc loại 'đóng cửa' không được đặt là

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

Tôi không chắc chắn lý do tại sao tôi không thay đổi gì trong mã của tôi.

Vui lòng thông báo.

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

Cũng xảy ra, như trong trường hợp của tôi, khi bạn chỉ nhầm lẫn gõ '[]' thay vì '()'! – ehsan88

Trả lời

30

Bạn không xác định véc tơ, url, trước khi cố gắng đặt tập hợp con. url cũng là một chức năng trong gói cơ sở, vì vậy url[i] đang cố gắng để tập hợp chức năng đó ... mà không có ý nghĩa.

Bạn có thể đã xác định url trong phiên R trước đó, nhưng quên sao chép mã đó vào tập lệnh của mình.

71

Nói chung, thông báo lỗi này có nghĩa là bạn đã cố gắng sử dụng lập chỉ mục trên một hàm. Bạn có thể sao chép thông báo lỗi này, ví dụ:

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 

Đóng cửa được đề cập trong thông báo lỗi là (lỏng lẻo) chức năng và môi trường lưu các biến khi hàm được gọi.


Trong trường hợp cụ thể này, như Joshua đã đề cập, bạn đang cố truy cập chức năng url làm biến. Nếu bạn xác định biến có tên là url thì lỗi sẽ biến mất.

Thực tế là bạn nên tránh các biến đặt tên sau hàm base-R. (Calling biến data là một nguồn phổ biến của lỗi này.)


Có một số lỗi liên quan cho cố gắng tập hợp con các nhà khai thác hoặc từ khóa.

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

Tôi nghĩ rằng bạn có nghĩa là để làm url[i] <- paste(...

thay vì url[i] = paste(.... Nếu vậy hãy thay thế = bằng <-.

Các vấn đề liên quan