Lỗi trong <mã của tôi>: đối tượng kiểu 'đóng cửa' không phải là bảng con


110

Cuối cùng tôi đã có thể tìm ra mã cho việc cạo của mình . Nó dường như đang hoạt động tốt và đột nhiên khi tôi chạy lại, tôi nhận được thông báo lỗi sau:

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

Tôi không chắc tại sao vì tôi không thay đổi gì trong mã của mình.

Xin hãy tư vấn.

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
Nó cũng xảy ra, như trong trường hợp của tôi, khi bạn gõ nhầm []thay vì ()!
Ehsan88

Câu trả lời:


118

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ể tạo lại thông báo lỗi này, chẳng hạn như

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

Bao đóng được đề cập trong thông báo lỗi là (một cách lỏng lẻo) hàm và môi trường lưu trữ 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ố gắng truy cập urlhàm dưới dạng một biến. Nếu bạn xác định một biến có tên url, thì lỗi sẽ biến mất.

Thông thường, bạn nên tránh đặt tên biến sau các hàm base-R. (Việc gọi các biến datalà nguyên nhân phổ biến của lỗi này.)


Có một số lỗi liên quan khi cố gắng tập hợp các toán tử 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

Nếu bạn đang gặp phải sự cố này shiny, nguyên nhân rất có thể là bạn đang cố gắng làm việc với một reactivebiểu thức mà không gọi nó dưới dạng một hàm bằng cách sử dụng dấu ngoặc đơn.

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

Trong khi chúng ta thường làm việc với các biểu thức phản ứng trong bóng như thể chúng là khung dữ liệu, chúng thực sự là các hàm trả về khung dữ liệu (hoặc các đối tượng khác).

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

Nhưng nếu chúng tôi cố gắng đặt nó mà không có dấu ngoặc đơn, thì chúng tôi thực sự đang cố gắng lập chỉ mục một hàm và chúng tôi gặp lỗi:

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

35

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

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


1

Trong trường hợp xảy ra lỗi tương tự này Cảnh báo: Lỗi trong $: đối tượng kiểu 'đóng cửa' không phải là bảng con [Không có dấu vết ngăn xếp]

Chỉ cần thêm tên gói tương ứng bằng :: ví dụ:

thay vì thẻ (....)

viết thẻ :: sáng bóng (....)


0

Tôi gặp sự cố này khi cố gắng xóa một phần tử ui bên trong một phản ứng sự kiện:

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

Tôi đã gặp lỗi này, nhưng không phải trên dòng phần tử removeUI, nó nằm trong trình quan sát tiếp theo vì một số lý do. Lấy phương thức removeUI ra khỏi eventReactive và đặt nó ở một nơi khác đã xóa lỗi này cho tôi.


-5

Tôi nghĩ bạn có ý định làm url[i] <- paste(...

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.