【问题标题】:Why does Shiny checkbox column add multiple entries为什么闪亮的复选框列添加多个条目
【发布时间】:2021-06-01 15:27:19
【问题描述】:

我希望在 Shiny 中有两个复选框列,并带有一个全/无按钮。下面的示例似乎有效,但是当我打印所选框的值时,第二列中的值会重复。

例如,在第 1 列中选择爱达荷州和伊利诺伊州,在第 2 列中选择密苏里州。结果是: Idaho Missouri, Illinois Missouri 重复密苏里州,并非全部用逗号分隔。

这是为什么?

如何获得由逗号分隔且不重复的状态向量?

R 脚本

library(shiny)
library(shinyWidgets)
library(dplyr)

df <- tibble(
  state = c("Alabama", "Alaska", "Arizona", "Arkansas",
            "California", "Colorado", "Connecticut", "Delaware", "Florida",
            "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa",
            "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts",
            "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",
            "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico",
            "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma",
            "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota",
            "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington",
            "West Virginia", "Wisconsin", "Wyoming")
)

ui <- fluidPage(
 
  wellPanel(
    checkboxInput('all_none', 'All/None'),
    tags$label("Choose :"),
    fluidRow(
      column(
        width = 4,
        checkboxGroupInput(
          inputId = "checka",
          label = NULL,
          choices = df$state[1:13]
        )
      ),
      
      column(
        width = 4,
        checkboxGroupInput(
          inputId = "checkb",
          label = NULL,
          choices = df$state[14:25]
        )
      )
    )
  ),
  textOutput("selected")
)

server <- function(input, output, session) {
  observe({
    updateCheckboxGroupInput(
      session, 'checka', choices = df$state[1:13],
      selected = if (input$all_none == TRUE) df$state
    )
  })
  observe({
    updateCheckboxGroupInput(
      session, 'checkb', choices = df$state[14:25],
      selected = if (input$all_none == TRUE) df$state
    )
  })
  
  output$selected <- renderText({
    paste(input$checka, input$checkb, collapse = ", ")
  })
}

shinyApp(ui, server)

【问题讨论】:

  • 我很抱歉。谢谢提醒!

标签: r shiny


【解决方案1】:

代码运行正常,但是当任何输入的长度大于 1 时,paste 的使用显示结果的方式不正确。

library(shiny)

output$selected <- renderText({
    paste(c(input$checka, input$checkb), collapse = ", ")
  })

举例说明:

paste('a', 'b', collapse = ',') #works as expected
#[1] "a b"

paste('a', c('b','c'), collapse = ',') #doesn't work
#[1] "a b,a c"

paste(c('a', c('b','c')), collapse = ',') #works as expected
#[1] "a,b,c"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2015-11-10
    • 2018-07-06
    • 1970-01-01
    • 2018-09-07
    • 2017-05-19
    相关资源
    最近更新 更多