< my code > 中的错误: 类型为“闭包”的对象不是子设置的

我终于算出了 我的刮痕的代码。它似乎工作得很好,然后当我再次运行它时,突然收到了下面的错误消息:

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
}
503751 次浏览

在尝试对向量 url进行子集化之前,不需要定义它。url也是基本包中的一个函数,所以 url[i]试图对该函数进行子集... ... 这是没有意义的。

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

通常,此错误消息意味着您已尝试对函数使用索引。您可以重现此错误消息,例如

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

我觉得你是想做 url[i] <- paste(...

如果是这样,用 <-代替 =

我遇到的问题是试图删除事件反应中的 ui 元素:

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

我得到了这个错误,但不在 RemoveUI 元素行上,出于某种原因,它出现在下一个观察者中。从 eventReactive 中取出 RemoveUI 方法并将其放置在其他地方可以为我删除这个错误。

如果出现类似的错误 警告: $: object 中的错误类型‘ close’不是子设置 [没有可用的堆栈跟踪]

只需使用以下方法添加相应的软件包名称: 例如:。

而不是标签(...)

写作 标签(... .)

这可能意味着一个未定义的变量。