R Shiny如何将textInput输入值用作tibble的列名
你遇到的报错本质是tibble()默认会把=左侧的内容识别为固定列名字面量,不会读取input$urgency1的实时值作为列名,该问题和你使用=还是<-作为赋值符号无关。
方案1:使用tidy evaluation动态指定列名(推荐)
直接在tibble()中用:=运算符配合!!对列名变量强制求值即可,修改后的完整可运行代码如下:
library(shiny) library(tibble) library(DT) ui <- fluidPage( textInput("urgency1", label = "Urgency 1", value = "2WW"), dataTableOutput("template") ) server <- function(input, output, session) { output$template = renderDataTable({ # 用!!和:=实现动态列名 df = tibble(!!input$urgency1 := rep(1, 105)) df }, options = list(pageLength = 10)) } shinyApp(ui, server)
注:如果你的tidyverse版本较新,也可以直接写
df = tibble("{input$urgency1}" := rep(1, 105)),写法更直观。
方案2:先创建数据框再修改列名(兼容性更强)
如果对tidy evaluation语法不熟悉,也可以先创建带临时列名的tibble,再通过names()函数替换列名:
server <- function(input, output, session) { output$template = renderDataTable({ df = tibble(temp_col = rep(1, 105)) # 直接替换列名 names(df) = input$urgency1 df }, options = list(pageLength = 10)) }
两种方案都可以实现修改输入框内容后,tibble的列名同步更新的效果。
内容的提问来源于stack exchange,提问作者Subaru Spirit
相关产品推荐
相关产品推荐

