我试图返回在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 = ""))
})
}
答案 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 = ""))
})
}
只是一个简单的错误