Ogólnie ten komunikat o błędzie oznacza, że próbowałeś użyć indeksowania funkcji. Możesz odtworzyć ten komunikat o błędzie, na przykład za pomocą
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
Zamknięcie wspomniane w komunikacie o błędzie to (luźno) funkcja i środowisko, które przechowuje zmienne, gdy funkcja jest wywoływana.
W tym konkretnym przypadku, jak wspomniał Joshua, próbujesz uzyskać dostęp do url
funkcji jako zmiennej. Jeśli zdefiniujesz zmienną o nazwie url
, błąd zniknie.
W ramach dobrej praktyki należy zazwyczaj unikać nazywania zmiennych po funkcjach typu base-R. (Wywoływanie zmiennych data
jest częstym źródłem tego błędu).
Istnieje kilka powiązanych błędów przy próbie podziału operatorów lub słów kluczowych na podzbiory.
`+`[1]
## Error in `+`[1] : object of type 'builtin' is not subsettable
`if`[1]
## Error in `if`[1] : object of type 'special' is not subsettable
Jeśli napotkasz ten problem w programie shiny
, najbardziej prawdopodobną przyczyną jest to, że próbujesz pracować z reactive
wyrażeniem bez wywoływania go jako funkcji przy użyciu nawiasów.
library(shiny)
reactive_df <- reactive({
data.frame(col1 = c(1,2,3),
col2 = c(4,5,6))
})
Chociaż często pracujemy z wyrażeniami reaktywnymi tak, jakby były ramkami danych, w rzeczywistości są to funkcje, które zwracają ramki danych (lub inne obiekty).
isolate({
print(reactive_df())
print(reactive_df()$col1)
})
col1 col2
1 1 4
2 2 5
3 3 6
[1] 1 2 3
Ale jeśli spróbujemy podzielić ją na podzbiory bez nawiasów, to w rzeczywistości próbujemy zindeksować funkcję i otrzymujemy błąd:
isolate(
reactive_df$col1
)
Error in reactive_df$col1 : object of type 'closure' is not subsettable
[]
zamiast()
!