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

Posted

技术标签:

【中文标题】Shiny:根据 selectInput 选择动态分配 var 名称【英文标题】:Shiny: assign var names dynamically based on selectInput selection 【发布时间】: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)), ]

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

【问题讨论】:

【参考方案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)
  )

【讨论】:

以上是关于Shiny:根据 selectInput 选择动态分配 var 名称的主要内容,如果未能解决你的问题,请参考以下文章

根据 R Shiny 中的其他选择动态更新两个 selectInput 框

如何根据Shiny中的selectInput显示不同的图像?

使用基于 selectInput 的动态参数将绘图从 rmarkdown 复制到 Shiny 的问题

如何在 RMarkdown 中使用 Shiny 进行嵌套选择 selectInput()?

Shiny - 更改 selectInput() 中的选项数量

从 selectInput 到 facet_wrap 的多个变量:R Shiny