如何将rpivotTable动态地插入Shiny UI

时间:2019-04-05 11:54:43

标签: r shiny rpivottable

我需要在闪亮的App中动态生成用户界面。这涉及在某些情况下使用insertUI将rpivotTable插入UI页面。我发现我只能成功地做到这一点。删除元素并再次插入后,它不会出现。问题仅在于rpivotTable。所有其他接口元素(如dataTable,actionButton等)都可以正常工作。这是重现该问题的示例代码:

$ kubectl get serviceAccounts -n gitlab-managed-apps
NAME                    SECRETS   AGE
default                 1         23h
ingress-nginx-ingress   1         23h
tiller                  1         23h

任何人都建议如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

此问题也作为问题发布在rpivotTable GitHub上,并在其中用以下解决方案代码回答了:

library(shiny)
library(rpivotTable)

ui<- fluidPage(title="test page",
               actionButton("A","insert pivot"),
               actionButton("B","remove pivot"),
               div(id = 'placeholder') 
)

server<- function (input, output, session)
{
  ds<-data.frame(a="1",b="2")
  inserted <- c()

  observeEvent(input$A, {
    btn <- input$A
    id <- paste0('txt', btn)
    insertUI(
      selector = '#placeholder',
      ## wrap element in a div with id for ease of removal
      ui = div(
        rpivotTable(ds), 
        id = id
      ))
    inserted <<- c(id, inserted)
  })
  observeEvent(input$B, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#', inserted[length(inserted)])
    )
    inserted <<- inserted[-length(inserted)]
  })
}

shinyApp(ui,server)

我认为解决方案基本上是为每个新的insertUI使用新的唯一ID。