Ошибка в <моем коде>: объект типа "закрытие" не является подмножеством

Наконец-то я смог выработать код моего скребка. Казалось, что он работает нормально, и вдруг, когда я снова запустил его, у меня появилось следующее сообщение об ошибке:

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

Замыкание, упомянутое в сообщении об ошибке, (свободно) является функцией и средой, в которой хранятся переменные при вызове функции.


В этом конкретном случае, как упоминал Джошуа, вы пытаетесь получить доступ к функции 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

Ответ 2

Вы не определяете вектор url, прежде чем пытаться его подмножить. url также является функцией в базовом пакете, поэтому url[i] пытается подмножить эту функцию... что не имеет смысла.

Вероятно, вы определили url в предыдущем сеансе R, но забыли скопировать этот код в свой script.

Ответ 3

Я тоже сталкиваюсь с той же ошибкой.. пожалуйста, помогите.. это блестящее приложение

сервер <-function (вход, выход, сеанс) {

mydata1 << -read.csv("C:/Пользователи /Acer/Документы/Кластеризация/Данные оптовых клиентов - Copy.csv") Наблюдение за событиями (input $ button3, {kmeans (mydata1,3) → clust3)

output$plot1 <- renderPlot({
  plot(Milk~Grocery,mydata1,col=clust3$cluster)
})

output$plot2 <- renderPlot({
  clusplot(mydata1,clust3$cluster, main = 'Clusterplot',color=TRUE, shade=TRUE, labels=2,lines=0)
})
textOutput$text1 <- renderPrint({
  clust3
})
output$plot1 <- renderPlot({
  plot(Milk~Grocery,mydata1,col=clust3$cluster)
})

output$plot2 <- renderPlot({
  clusplot(mydata1,clust3$cluster, main = 'Clusterplot',color=TRUE, shade=TRUE, labels=2,lines=0)
})
textOutput$text1 <- renderPrint({
  clust3
})

}) } })}

Ответ 4

У меня была эта проблема, пытался удалить элемент пользовательского интерфейса внутри реактивного события:

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

Я получал эту ошибку, но не в строке элемента removeUI, а по какой-то причине в следующем наблюдателе. Извлечение метода removeUI из eventReactive и размещение его в другом месте удалило эту ошибку для меня.

Ответ 5

В случае подобной ошибки Предупреждение: ошибка в $: объект типа 'замыкание' не может быть подмножеством [Нет трассировки стека]

Просто добавьте соответствующее имя пакета, используя :: например,

вместо тегов (....)

записывать блестящие :: теги (....)

Ответ 6

Я думаю, вы хотели сделать url[i] <- paste(...

вместо url[i] = paste(.... Если это так, замените = на <-.