在 Shiny 中获取与反应式表达式相关的“错误:找不到函数”

Posted

技术标签:

【中文标题】在 Shiny 中获取与反应式表达式相关的“错误:找不到函数”【英文标题】:Get "error: could not find function" in Shiny relating to reactive expression 【发布时间】:2019-05-28 02:23:40 【问题描述】:

我正在尝试返回在 Shiny 的反应式表达式中创建的字符向量。但是,当我运行该应用程序时,我得到以下信息:

错误:找不到函数“check_case”

check_case 是响应式表达式,而不是函数。

我可以看到有类似问题的人提出的许多问题,但答案似乎不适合这个(例如,调用反应式表达式时缺少括号;调用反应式表达式中未返回的内容) .

在使用paste 之前,我已尝试将check_case() 立即转换为输出中的字符向量。我还尝试向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 = ""))
  )

【问题讨论】:

据我所知,没有名为 check_case 的 UI 元素,所以当你输出到不存在的时候。 试着去掉output$check_case中的output,因为你想创建反应变量,而不是输出,因为这是由output$text完成的 啊啊!你说得对;它应该只是check_case 而不是output$check_case。谢谢! 引发该错误的表达式是check_case()。解释器看不到check_case,因为它是一个命名列表元素,并且在output 的环境之外是不可见的。 【参考方案1】:

问题在于您试图在创建反应变量的同时输出它。还需要注意的是,渲染时需要输出到现有的 UI 元素。

这可以通过创建反应变量来简单地解决,然后像使用 ouput$text 一样使用 renderUI 渲染它

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 = ""))
  )

只是一个简单的错误

【讨论】:

以上是关于在 Shiny 中获取与反应式表达式相关的“错误:找不到函数”的主要内容,如果未能解决你的问题,请参考以下文章

Shiny 中两个相关的 selectizeInput 小部件的反应式更新

R Shiny:使用来自反应函数的数据制作反应图

如何在Shiny R中丢弃DT :: datatable上的用户编辑

你好闪亮的应用程序在反应性表达中给了我错误

R Shiny DT - 使用反应式编辑表中的值

如何在 Shiny 中跨选项卡持久化 event_data?