【问题标题】:Reactive Multi-level List in ShinyShiny 中的反应式多级列表
【发布时间】:2017-06-08 20:01:08
【问题描述】:

我正在尝试在 Shiny 中创建一个能够将孩子添加到父母的多级列表,但我无法让它反应。是否可以有一个闪亮的按钮来附加由下一个整数索引的新项目?

例如:

 1.
 1.1
 1.1.1
 1.2

具有在 1.1 下“添加”新项目的功能,索引 1.1.2 以及 1.2.1 在 1.2 下的功能,如下所示:

 1.
 1.1
 1.1.1
 1.1.2
 1.2
 1.2.1

我试图让它创建一个列表,然后有两个操作按钮来添加/删除列表中的列表项。

【问题讨论】:

  • 如何决定是添加 1.1.2 还是 1.2.1?
  • 在多级列表中的每个项目上都显示一个操作按钮,以向其中“添加”一个子项,从而将其确定为父项。这是可能的还是只添加另一个成员会更容易,用户定义数字模式,然后列表调整到该输入?
  • 我建议使用 selectinput 来选择父级,然后通过操作按钮将子级添加到所选父级,您怎么看?
  • @BigDataScientist 听起来可行。一个 selectinput 如何在闪亮的情况下工作,并且能够生成类似的东西?对不起,我缺乏知识...
  • 它不像预期的那么简单,但我认为它应该按计划工作。

标签: r shiny


【解决方案1】:

您可以将其存储在 reactiveValue() 中并通过 selectInput() 进行选择,如 cmets 中所述:

ui <- fluidPage(
  uiOutput("parent"),
  actionButton("add", "add"),
  actionButton("remove", "remove"),
  verbatimTextOutput("txt")
)
server <- function(input, output){
  global <- reactiveValues(lst = list(list(list(1),list(2), list(3))))

  output$parent <- renderUI({
    selectInput("par", "parent", 1:length(global$lst[[1]]))
  })

  observe({
    if(input$remove){
      isolate({
        lst <- global$lst[[1]]
        len <- as.numeric(input$par)
        lens <- lengths(lst)
        global$lst[[1]][[len]][[lens[len]]] <- NULL
      })
    }
  })

  observe({
    if(input$add){
      isolate({
        lst <- global$lst[[1]]
        len <- as.numeric(input$par)
        lens <- lengths(lst)
        global$lst[[1]][[len]][[lens[len] + 1]] <- "i am the new guy"  
      })
    }
  })


  output$txt <- renderPrint({
    str(global$lst)
  })
}
shinyApp(ui, server)

【讨论】:

  • 效果很好。谢谢@BigDataScientist。我认为这为我想做的事情奠定了良好的基础。
  • 如何为列表中所有创建的项目关联一个 textInput?创建层次结构后,我想为列表中的每个项目创建一个输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2014-09-05
  • 2020-03-24
  • 2017-01-17
  • 2015-08-14
相关资源
最近更新 更多