【问题标题】:How can I store the output using lapply in shiny?如何在闪亮中使用 lapply 存储输出?
【发布时间】:2021-04-19 08:05:01
【问题描述】:

我正在构建一个允许用户提交足球运动员阵型的应用。播放器名称存储在 .csv 文件中。这些名称被读入,然后是选择输入的输入。用户应该首先选择一个编队,然后根据所选择的编队出现带有名称的选择输入。使用 lapply 效果很好(在下面的示例中,有 2 个选择输入)。
我现在的问题是我想将选定的名称存储在一个变量中以进一步使用它们。变量 myval 应该存储选定的名称。它以某种方式仅适用于第一个选择输入的第一个选定名称。

我的意思是这可以工作并存储在第一个选择输入中选择的名称:

     myval <- eventReactive(input$i[1],
                                 {input$i[1]}) 

但这不起作用:

     myval <- eventReactive(input$i[2],
                                 {input$i[2]}) 

您可以在下面找到完整的代码。 非常感谢!

ui.R:

    fluidPage(
    #Dropdown
      selectInput("Formation", label = "Formation", choice = c("",433,343)),
    #Output
      uiOutput(outputId = "select_formation")
    )

服务器.R:


    function(input, output, session){
    
    #input_names <- read.csv("temp.csv",TRUE,";")
    input_names <- structure(list(Goalkeeper = c("-", "Max", "Mo", "Tobi", "", "", 
""), Defender = c("-", "Bob", "Julius", "Mat", "Hans", "Peter", 
"Tom")), class = "data.frame", row.names = c(NA, -7L))

    output$select_formation = renderUI(
        if(input$Formation == 433){      
          lapply(1:2,function(i){
          selectInput(inputId = "i", label = names(input_names[i]), choices = c(input_names[,i]))
          })
        })

      myval <- eventReactive(input$i[2],
                             {input$i[2]}) 
 }

【问题讨论】:

    标签: r shiny lapply shiny-reactivity selectinput


    【解决方案1】:

    感谢您提供数据。这是一个可能有用的工作示例。

    动态创建的selectInputinputIdpaste0("id", i) 创建,因此在您的示例中您将拥有id1id2

    你的myvalreactive表达式可以再次通过lapply获取输入值的列表,使用相同的id作为参考。

    library(shiny)
    
    ui <- fluidPage(
      selectInput("Formation", label = "Formation", choice = c("",433,343)),
      uiOutput(outputId = "select_formation"),
      uiOutput("select_inputs")
    )
    
    server <- function(input, output, session) {
      
      output$select_formation = renderUI(
        if(input$Formation == 433){      
          lapply(1:2, function(i){
            selectInput(inputId = paste0("id", i), label = names(input_names[i]), choices = c(input_names[i]))
          })
        })
      
      myval <- reactive({
        lapply(1:2, function(i) {
          input[[paste0("id", i)]]
        })
      })
                             
      output$select_inputs <- renderUI({
        paste("You selected: ", paste(myval(), collapse = ", "))
      })
      
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 哇,感谢您这么快的回复。我会试试看,让你知道:D!
    • 完美运行,正是我所寻找的。谢谢本!
    猜你喜欢
    • 2018-06-26
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2021-05-12
    • 2017-12-16
    • 2017-10-20
    • 2019-12-19
    相关资源
    最近更新 更多