在 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 小部件的反应式更新