<我的代码>中的错误:“关闭”类型的对象不可子集化


110

我终于能够制定出我的抓取代码。它似乎运行良好,然后突然再次运行时,出现以下错误消息:

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 '16

Answers:


118

通常,此错误消息表示您已尝试在函数上使用索引。您可以使用以下方式重现此错误消息:

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

错误消息中提到的闭包是(宽松地)函数和调用函数时存储变量的环境。


如Joshua所述,在这种特定情况下,您试图将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

如果您在中遇到此问题shiny,最可能的原因是您尝试使用reactive表达式而不将其作为使用括号的函数来调用。

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

尽管我们经常将反应式表达式当作数据帧来处理,但实际上它们是返回数据帧(或其他对象)的函数

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

但是,如果我们尝试在不带括号的情况下对其进行子集化,则实际上是在尝试对一个函数进行索引,并且会出现错误:

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

35

url在尝试对向量进行子集化之前,您无需定义向量。 url也是基本包中的一个函数,因此url[i]尝试对该函数进行子集化……这没有意义。

您可能url在先前的R会话中进行了定义,但是忘记了将该代码复制到脚本中。


1

如果发生类似的错误 警告:$:错误:“ closure”类型的对象不可子集化[无可用的堆栈跟踪]

只需使用::添加相应的包名称

而不是标签(....)

写闪亮的::标签(....)


0

我遇到了这个问题,试图在事件反应中删除ui元素:

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

我收到此错误,但不是在removeUI元素行上,由于某种原因,它出现在下一个观察器中。从eventReactive中取出removeUI方法并将其放置在其他位置对我来说消除了此错误。


-5

我想你打算 url[i] <- paste(...

代替url[i] = paste(...。如果是这样,请替换=<-

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.