【问题标题】:for loop shiny variable assignmentfor循环闪亮变量赋值
【发布时间】:2017-06-09 22:38:56
【问题描述】:

我有一段重复 20 次的代码,其中显示了相同的信息、绘图等,并且显示的数据集的数量取决于用户在闪亮中选择了多少输入字段应用程序。我不想在第二个块中复制/粘贴此代码并将输入名称从“Job1”更改为“Job2”,而是要引入一个 for 循环。我的问题是如何为连续的闪亮输入分配变量。我已经尝试 paste0 来完成我想要做的事情,但没有运气。

示例代码显示了我在 for 循环中尝试使用 4 次迭代来做同样的事情。我尝试完成这项工作的部分在 ui 顶部附近被注释掉。它现在的方式按预期工作,但正如您所见,它并不干净而且非常乏味。另外,这在服务器端会是什么样子(我的尝试现在也被注释掉了)

      ui <- fluidPage(
      numericInput("num_selected", label = "Fields to Display", value = 0, min = 0, max = 4, step = 1),


      # for (i in 1:4 ) {
      #     conditionalPanel(
      #       condition = "input.num_selected >= i",
      #       textInput(paste0("Name", i), "Name"),
      #       textInput(paste0("Job", i), "Job")
      # )
      # }



    conditionalPanel(
      condition = "input.num_selected >= 1",
      textInput("Name1", "Name"),
      textInput("Job1", "Job")
    ),



    conditionalPanel(
      condition = "input.num_selected >= 2",
      textInput("Name2", "Name"),
      textInput("Job2", "Job")
    ),


    conditionalPanel(
      condition = "input.num_selected >= 3",
      textInput("Name3", "Name"),
      textInput("Job3", "Job")
    ),


    conditionalPanel(
      condition = "input.num_selected >= 4",
      textInput("Name4", "Name"),
      textInput("Job4", "Job")
    )
    )

    server<-function(input,output,session)
    {
      # for (i in 1:20 ) {
      # output$paste0("Name", i) <- ...
      # output$paste0("Job", i) <- ...
          # }
    }

    shinyApp(ui=ui, server=server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可以使用tagList()renderUI()

    ui <- fluidPage(
      numericInput("num_selected", label = "Fields to Display", value = 0, min = 0, max = 10, step = 1),
      uiOutput("condPanels")
    )
    
    server<-function(input,output,session){
    
      output$condPanels <- renderUI({
        # if selected value = 0 dont create a condPanel,...
        if(!input$num_selected) return(NULL)
        tagList(
          lapply(1:input$num_selected, function(nr){
            conditionalPanel(
              condition = paste0("input.num_selected >= ", nr),
              textInput(paste0("Name", nr), "Name"),
              textInput(paste0("Job", nr), "Job")
            )
          })
        ) 
      })
    
    }
    
    shinyApp(ui=ui, server=server)
    

    【讨论】:

    • 这很好用,但我担心我在尝试制作示例代码时过度简化了我的问题,对此我深表歉意。我试图基于选择数量的字段是 selectInput 字段,而不是 numericInput,并且出现的字段是输出,而不是输入,所以我遇到了同样的问题,即引用字段来填充输出以一种重复的方式。 stackoverflow.com/questions/44504592/…
    猜你喜欢
    • 2017-11-14
    • 2019-12-27
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多