Ошибка в <моем коде>: объект типа "закрытие" не является подмножеством
Наконец-то я смог выработать код моего скребка. Казалось, что он работает нормально, и вдруг, когда я снова запустил его, у меня появилось следующее сообщение об ошибке:
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(...
. Если это так, замените =
на <-
.