【问题标题】:Shiny: assign var names dynamically based on selectInput selectionShiny:根据 selectInput 选择动态分配 var 名称
【发布时间】:2019-04-06 21:48:37
【问题描述】:

我正在尝试使用 selectInput 将 data.table 子集化到所选列,同时保留其名称。到目前为止,我已经完成了:

library(data.table)
mtcars <- data.table(mtcars)

ui <- bootstrapPage(
  uiOutput('variables'),
  tableOutput('table')
)

server <- function(input, output) {
  output$variables<- renderUI ({
    selectInput('var', 
                label = 'select Vars:', 
                choices = as.list(colnames(mtcars)),
                multiple = F)
  })


  df <- reactive({
    df <- mtcars[, list(var_name=get(input$var)), ]
  })

  output$table <- renderTable({head(df())})

}

shinyApp(ui = ui, server = server)

输出是

但我真正想要的是列名与原始df中的相同。 我尝试过没有成功的选项,例如:

    df <- mtcars[, list(input$var), ]
    df <- mtcars[, list(paste0(input$var)=get(input$var)), ]

但都没有给我想要的输出...... 有任何想法吗 ? 提前致谢

【问题讨论】:

    标签: r shiny data.table selectinput


    【解决方案1】:

    你的意思是这样的吗? :

    df <- reactive({
        df <- mtcars[, list(var_name=get(input$var)), ]
        colnames(df) <- input$var
        df
    })
    

    显然,您也可以将 colname 编辑为其他内容

    【讨论】:

    • 我以前尝试使用 colnames(df)
    • 如果你没有明确的return() 调用,那么函数将输出最后一个计算表达式的值。因此,没有最终 df 的方法应该只返回 input$var 的值。请参阅here 以获得简要说明,here 讨论是否明确调用return(df) 或仅调用df
    【解决方案2】:

    您可以在子集后重新分配列名:

      df <- reactive({
        df <- mtcars[, list(var_name=get(input$var)), ]
        colnames(df) <- input$var
        return(df)
      })
    

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 2021-02-24
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 2019-06-24
      • 2023-02-11
      • 2020-12-25
      相关资源
      最近更新 更多