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

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
}


评论

当我只是错误地输入[]而不是()时,也会发生这种情况,就像我的情况一样。

#1 楼

通常,此错误消息表示您已尝试在函数上使用索引。您可以使用例如

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是此错误的常见来源。)


尝试对运算符或关键字进行子集化时存在一些相关的错误。 >

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

`+`[1]
## Error in `+`[1] : object of type 'builtin' is not subsettable
`if`[1]
## Error in `if`[1] : object of type 'special' is not subsettable


虽然我们经常将闪亮的反应式表达式视为数据帧,但它们实际上是返回数据帧(或其他对象)的函数。

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


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

#2 楼

在尝试对向量进行子集化之前,您无需定义向量urlurl也是基本软件包中的一个函数,因此url[i]试图对该函数进行子集处理……这没有任何意义。该代码到您的脚本。

#3 楼

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

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

而不是标签(....)

编写
shiny :: tags(....)

#4 楼

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

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


我遇到此错误,但是在removeUI元素行中却没有,由于某种原因之后的下一个观察者。从eventReactive中取出removeUI方法并将其放在其他位置对我来说消除了此错误。

#5 楼

我认为您是打算执行url[i] <- paste(...而不是url[i] = paste(...。如果是这样,请将=替换为<-