Получить "ошибка: не удалось найти функцию" в Shiny, касающуюся реактивного выражения - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь вернуть вектор символов, созданный в реактивном выражении в Shiny.Однако, когда я запускаю приложение, я получаю следующее:

Ошибка: не удалось найти функцию "check_case"

check_case - это реактивное выражение, а нефункция.

Я вижу несколько вопросов от людей с похожими проблемами, но ответы, кажется, не соответствуют этому (например, отсутствие скобок при вызове реактивного выражения; вызов чего-то, что не было возвращено вреактивное выражение).

Я попытался немедленно перевести check_case() в символьный вектор в выводе перед использованием paste.Я также попытался добавить дополнительные аргументы в paste, чтобы он включал sep = и collapse =, на случай, если это является частью проблемы, но это не меняет результат, который я получаю.

В настоящее время у меня есть две теории:

  • Существует проблема в способе использования реактивного выражения для возврата символьного вектора.Обычно я использую их для возврата фреймов данных, поэтому здесь может быть что-то, чего мне не хватает.
  • Существует проблема в способе использования paste для ссылки на символьный вектор.

Код:

library(shiny)
library(shinydashboard)


sidebar <- dashboardSidebar(
  selectInput(
  "case_select", label = "Select case",
  choices = c("Upper", "Lower")
  )
)

body <- dashboardBody(
  fluidRow(
      htmlOutput("text"))
)

ui <- dashboardPage(dashboardHeader(title = "Example"),
                    sidebar,
                    body
)

server <- function(input, output) {

  output$check_case <- reactive({
    if (input$case_select == "Upper") {
      case_list <- c("A", "B", "C")
      } else {
        case_list <- c("a", "b", "c")
      }
    return(case_list)
  })

  output$text <- renderUI({
    check_case <- check_case()
    HTML(paste(check_case, sep = "", collapse = ""))
  })
}

1 Ответ

0 голосов
/ 31 декабря 2018

Проблема связана с тем, что вы пытаетесь вывести реактивную переменную при ее создании.Также важно отметить, что вам нужно выводить в существующий элемент пользовательского интерфейса при рендеринге.

Это может быть просто решено путем создания реактивного varaible, а затем последующего рендеринга с помощью renderUI, как вы делаете сouput$text

server <- function(input, output) {

  check_case <- reactive({
    if (input$case_select == "Upper") {
      case_list <- c("A", "B", "C")
      } else {
        case_list <- c("a", "b", "c")
      }
    return(case_list)
  })

  output$text <- renderUI({
    check_case <- check_case()
    HTML(paste(check_case, sep = "", collapse = ""))
  })
}

Просто простая ошибка

...