You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 00:36:05