【发布时间】:2021-07-31 17:49:08
【问题描述】:
我正在创建一个动态闪亮的应用程序,它的工作方式类似于查找表——它允许用户选择输入值,并作为回报给出两个对应的输出值(一个数字和一个字符),它们存在于同一个表中。
我的代码需要是动态的,这样当数据框改变时,用户界面也会随之改变。例如,如果数据表包含 3 个输入变量而不是 2 个,则侧边栏中需要多一个 selectInput 框。如果一个变量最终有 3 个可能的值而不是 2 个,则需要另一种选择。
因此,我的代码需要:
- 检查更新的表格,
- 查看有多少变量并相应地更新侧边栏中的输入选项
- 更新每个变量的值范围
- 相应地更新输出。
下面是一个简化的代码:
{
library(shiny)
library(shinydashboard)
library(shinyjs)
}
Test <- data.frame(
stringsAsFactors = FALSE,
input1 = c("precarious", "precarious", "good"),
input2 = c("precarious", "moderate", "precarious"),
NumericOutput = c(3.737670877,6.688008306,8.565495761),
CharacterOutput = c("precarious", "moderate", "good")
)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
useShinyjs(),
selectInput("a", label = colnames(Test[1]),
choices = unique(Test[[1]])),
selectInput("b", colnames(Test[2]),
choices = unique(Test[[2]]))
),
dashboardBody(fluidRow(valueBoxOutput("info_box1", width = 6)),
fluidRow(valueBoxOutput("info_box2", width = 6)))
)
server <- function(input, output) {
output$info_box1 <- renderValueBox({
valueBox(
value = paste0("Score in %: ",
Test$NumericOutput[Test$input1 == input$a & Test$input2 == input$b],
collapse = ", "),
subtitle = NULL)
})
output$info_box2 <- renderValueBox({
valueBox(value = paste0(
"Assessment: ",
Test$CharacterOutput[Test$input1 == input$a & Test$input2 == input$b],
collapse = ", "),
subtitle = NULL)
})
}
shinyApp(ui, server)
【问题讨论】:
-
你能描述一下
valueBox中的价值观背后的想法吗,因为我不清楚它们应该包含什么。 -
嘿,@det。这些是输出值,即评估分数和一个单词描述。这些基于用户选择的输入值。
-
一种选择是使
Test数据框成为响应式,然后一切都应遵循。我的回答here 演示了如何根据底层数据框的列和值更新selectInputs,尽管上下文略有不同。您似乎没有解释基础表(代码中的Test?)如何更新。 -
嘿,@Limey 您的代码提供了添加列的选项。每当更新数据时,我都需要这些列默认显示为 selectInput。数据不是由用户更新的,它是在后台更新的——和源代码在同一个地方。
标签: r shiny shinydashboard shiny-server shiny-reactivity