Загалом це повідомлення про помилку означає, що ви намагалися використовувати індексацію функції. Наприклад, ви можете відтворити це повідомлення про помилку
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
[]
замість()
!