【问题标题】:R shiny: selectInput() doesn't reflect the variable selection when multiple=TRUER闪亮:当multiple = TRUE时selectInput()不反映变量选择
【发布时间】:2014-12-15 03:16:31
【问题描述】:

我编写了一个闪亮的小应用程序来测试用户上传数据的变量选择功能。这是我的代码:

ui.R

shinyUI(pageWithSidebar(
  headerPanel("CSV Data explorer"),
  sidebarPanel(

    fileInput('datafile', 'Choose CSV file',
          accept=c('text/csv', 'text/comma-separated-values,text/plain')),

    htmlOutput("varselect", inline=TRUE),

    selectInput("vars", "Select a variable:",choices=htmlOutput("varselect")),

    br()  
  ),

  mainPanel(

    dataTableOutput("table")

  )
))

server.R

shinyServer(function(session,input, output) {

  Dataset <- reactive({
  infile <- input$datafile
  if (is.null(infile)) {

    return(NULL)
  }
  read.csv(infile$datapath)
  })

  observe({
  output$varselect <- renderUI({

    if (identical(Dataset(), '') || identical(Dataset(),data.frame())) return(NULL)

      updateSelectInput(session, inputId="vars", label="Variables to use:",
                    choices=names(Dataset()), selected=names(Dataset()))

    })
  })

  output$table <- renderDataTable({

  if (is.null(input$vars) || length(input$vars)==0) return(NULL)

  return(Dataset()[,input$vars,drop=FALSE])
  })

})

如果您继续对任何 csv 文件进行测试,您将看到 2 个问题: 1. selectInput() 框上方的所有变量名显示混乱,这是由代码引起的:

htmlOutput("varselect", inline=TRUE)

但是如果我删除这行代码,我的 selectInput 就会消失。

  1. 如果我更改为
  2. ,则 selectInput 只允许选择单个变量

selectInput("vars", "选择一个变量:",choices=htmlOutput("varselect"), multiple=TRUE),

并尝试点击多个选项,它不会反映在主面板的表格中。

我已经为这个问题苦苦挣扎了一段时间。有人可以帮忙吗!提前数以百万计的感谢!

问候, 介意

【问题讨论】:

  • 所以澄清一下,您是否只是想让用户选择要在数据表中显示的变量(即列名)?你的目标是什么?
  • 您好 cdeterman,感谢您的回复。是的,我尝试允许用户选择多个变量以显示在表格中(以及用于进一步分析,例如多元回归,这尚未反映在上述代码中)。

标签: file variables upload shiny interactive


【解决方案1】:

我认为你让你的过于复杂了。简而言之,您只需要一个uiOutput 来代替您的ui.R 中的htmlOutputselectInput 语句。似乎也不需要updateSelectInputobserve 函数。您可以将代码简化为以下内容,并且多项选择似乎可以正常工作:

ui.R

shinyUI(pageWithSidebar(
  headerPanel("CSV Data explorer"),
  sidebarPanel(

    fileInput('datafile', 'Choose CSV file',
              accept=c('text/csv', 'text/comma-separated-values,text/plain')),

    uiOutput("varselect"),
    br()  
  ),

  mainPanel(

    dataTableOutput("table")

  )
))

服务器.R

shinyServer(function(session,input, output) {

  Dataset <- reactive({
    infile <- input$datafile
    if (is.null(infile)) {

      return(NULL)
    }
    read.csv(infile$datapath)
  })

  output$varselect <- renderUI({

    if (identical(Dataset(), '') || identical(Dataset(),data.frame())) return(NULL)

    cols <- names(Dataset())
    selectInput("vars", "Select a variable:",choices=cols, selected=cols, multiple=T)  

  })

  output$table <- renderDataTable({

    if (is.null(input$vars) || length(input$vars)==0) return(NULL)

    return(head(Dataset()[,input$vars,drop=FALSE]))
  })

})

【讨论】:

  • 您好 cdeterman - 谢谢,但仍然无法在我身边工作?我可以对变量进行多项选择,但主面板中的表格仍会显示所有变量。理想情况下,我想看看当我只选择变量子集时,只会显示数据子集并用于分析。
  • 代码当前将所有变量设置为选中状态(模仿您的初始代码)。您可以“删除”被选中的变量吗?如果您想从无变量开始,也可以从 selectInput 中删除“选定”部分。
  • 您好 cdeterman,我也尝试了删除变量,但表格仍然没有反映子集选择。我将上面的代码更改为在开始时包含 0 个变量,但仍然没有运气。也许它取决于数据集?这是我用过的测试数据集:dl.dropbox.com/u/25945599/scores.csv
  • @cloudy,你的数据集适合我。嗯……你用的是什么版本的闪亮?另外,请确保您拥有我上面提供的确切代码。
  • 嗨 cdeterman,一定有一些我遗漏的东西。我运行了上面的确切应用程序,但子集选择似乎不起作用? dropbox.com/s/2wh56rvbks00rsp/readcsv.jpg?dl=0 这是一个屏幕截图,您可以看到我只选择了 2 个变量,但主面板表显示了整个数据集。
猜你喜欢
  • 2019-10-23
  • 2020-08-02
  • 2014-02-23
  • 2018-12-05
  • 1970-01-01
  • 2017-11-18
  • 2013-06-05
  • 2021-01-04
相关资源
最近更新 更多