繁体   English   中英

R Shiny基于复选框创建动态数字输入

[英]R Shiny Create Dynamic Numeric Input Based off Checkboxes

我正在编写的程序使用一个电子表格进行评分,然后创建其接收到的数据的表,图和摘要。 但是,我希望多个用户能够使用它。 这意味着每种类型的成绩(作业,测验,测验等)的权重对于每个用户而言都是不同的。

我要尝试做的是创建一个checkboxGroupInput,该列表生成不同等级的列表(从电子表格的“类型”列中读取),然后在选中每个复选框时,将弹出一个numericInput,允许用户选择一个重量。 这是示例图片。

图片示例 (对不起,我现在没有足够的声誉来发布图片)

但是,我不知道如何将numericInput呈现为每个复选框的True / False值。 我知道如何根据组输入来呈现表以显示列,如本例所示 ,但我不知道如何初始化未知数量的numericInputs,因为每个输入都是其自己的变量。 这可能吗? 我想不出另一种方式来实现我想要的。

这是到目前为止我所拥有的代码(摘要)。

ui <- fluidPage(
          dashboardBody(
      tabBox(
        id = 'tabset1',
        width = '100%',
        tabPanel('Enter weights', 
                  splitLayout(uiOutput('type'), uiOutput('weight'))),
        tabPanel('Grades Graph', plotOutput('individualGraph')),
        tabPanel('Grades Table', dataTableOutput('summaryDT')),
        tabPanel('Summary by Unit', plotOutput('summaryBarGraph'), br(), dataTableOutput('summaryUnitDT')),
        tabPanel('Class Averages', plotOutput('classAverageGraph'), br(), dataTableOutput('classAverageTable'))
      )
    )

server <- function(input, output, session) {

  output$type <- renderUI({
    df <- data.frame(grades())
    choices <- unique(pull(df, Type))
    checkboxGroupInput(inputId = 'typeVar',
                label = 'Select Type',
                choices = choices,
                selected = choices)
  })

  output$weight <- renderUI({
    numericInput(inputId = 'weightVar',
                 label = 'Select Weight %', value = 50,
                 width = 50)
  })
}

任何帮助/指导将不胜感激! 如果我认为这是实现我想要的最好方法的错误,请告诉我。 我愿意接受更多建议。

首先,checkboxGroupInput()在这里有意义吗? 似乎单选按钮UI元素与您要做的更好的事情匹配(因为单选按钮向用户暗示一次只能检查一个)。 其次,您可以尝试使用一个数字输入并使用updateNumericInput()来在单选按钮更改时对其进行更改吗? 然后,在处理数字更改时,您的条件语句将只需要查看数字以及选中了哪个单选按钮。

我正在设想这样的事情:

observeEvent(input$RadioButton, {
    updateNumericInput(session, "NumericInputName", value=theVariable)
}

其中,Variable是先前为该类别输入的值(测试,测验等);如果没有为该类别输入任何内容,则为0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM