闪亮:根据 selectInput 选择动态分配 var 名称

Shiny: assign var names dynamically based on selectInput selection

我正在尝试使用 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)), ]

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

你的意思是这样的吗? :

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

显然您也可以将 colname 编辑为其他名称

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

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