如何在R Shiny中通过textInput创建同名列表并赋值?
解决R Shiny中创建命名列表的问题
你当前的代码只是把生成的字符串添加到列表里,但没给元素设置对应的名称。要实现用用户输入作为列表名,只需要在添加元素时给新的列表项指定名称即可,下面是修改后的完整代码:
library(shiny) my_list <- reactiveVal(list()) ui <- fluidPage( textInput(inputId = "my_input", label = "Enter some text:"), actionButton(inputId = "add_button", label = "Add"), verbatimTextOutput(outputId = "my_output") ) server <- function(input, output, session) { observeEvent(input$add_button, { new_item <- isolate(input$my_input) if (nchar(new_item) > 0) { # 动态生成以用户输入为名称的列表项 new_list_entry <- list(!!new_item := paste0(new_item, Sys.Date())) # 追加到现有列表中 my_list(append(my_list(), new_list_entry)) } }) output$my_output <- renderPrint({ my_list() }) } shinyApp(ui = ui, server = server)
关键修改说明
!!new_item :=是用非标准求值语法实现动态命名:!!会把new_item的实际值取出来作为列表项的名称,:=用来给该名称绑定对应的元素值。- 如果你不习惯非标准求值,也可以用
setNames()函数替代,效果完全一样,修改这部分代码即可:new_list_entry <- setNames(list(paste0(new_item, Sys.Date())), new_item)
内容的提问来源于stack exchange,提问作者Wang
相关产品推荐
相关产品推荐

