在Shiny中获取与反应性表达有关的“错误:找不到功能”

时间:2018-12-31 16:11:27

标签: r shiny reactive

我试图返回在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 :(得分:1)

问题与您在尝试创建反应式变量的同时尝试输出它有关。同样重要的是要注意,渲染时需要输出到现有的UI元素。

可以通过创建反应性变量来解决此问题,然后像使用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 = ""))
  })
}

只是一个简单的错误