如何在闪亮中使用 lapply 存储输出?

Posted

技术标签:

【中文标题】如何在闪亮中使用 lapply 存储输出?【英文标题】:How can I store the output using lapply in shiny? 【发布时间】: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]) 
 

【问题讨论】:

【参考方案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! 完美运行,正是我所寻找的。谢谢本!

以上是关于如何在闪亮中使用 lapply 存储输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 lapply 的输出保存(分配)到 R 中的单个变量中?

如何将闪亮的输入值转换为闪亮的输出表

删除后如何将旧的反应输入存储在R闪亮中

如何在 R 中使用 lapply 消除异常

如何使用闪亮的输入/输出读取向量?

R Shiny 不会在闪亮的应用程序中显示输出,而只会在控制台中显示输出(以及如何正确计算子组的平均值)?