R闪亮 - 是否可以在没有用户输入的情况下制作动态UI?

时间:2018-02-06 12:31:05

标签: r dynamic shiny

我想知道是否有可能使UI适应,但是从数据集而不是用户输入。 我已经看到了insertUI(https://shiny.rstudio.com/reference/shiny/latest/insertUI.html)的示例,但它在我的情况下不起作用,因为它不属于被动事件。

我收到了这个错误:

  

.getReactiveEnvironment()$ currentContext()中的错误:    没有活动的反应上下文,不允许操作。 (你试图做>只能在反应式表达式或观察者内部完成的事情。)

这是我的服务器.R代码:

  i = 2017
  while(TRUE){
    if(file.exists(paste("Challenge_adultes_",i, ".xlsx",sep=""))){

      insertUI(
        selector = "#add",
        where = "afterEnd",
        ui = textInput(paste0("txt", input$add),
                       "Insert some text")
      )
      i = i+1
    }else{
      break
    }
  }

我的用户界面:

  navbarPage("xxx",
             actionButton("add", "Add UI")
  )

那么,是否可以在没有用户输入的情况下使用insertUI创建动态UI? 谢谢你的阅读。

正如所提出的,一个完全可再现的例子:

library(shiny)
if (interactive()) {
  ui <- fluidPage(
    navbarPage("xxx",
               actionButton("add", "Add UI")

    )
  )

  server <- function(input, output, session) {

        insertUI(
          selector = "#add",
          where = "afterEnd",
          ui = textInput(paste0("txt", input$add),
                         "Insert some text")
        )
  }
  shinyApp(ui, server)
}

1 个答案:

答案 0 :(得分:0)

该错误消息的关键部分是:

  

你试图做一些只能在内部完成的事情   反应性表达或观察者

您需要将insertUI()函数放在反应函数中。 observe()函数就像observeEvent(),但它不是直接触发器,只要它的依赖关系发生变化就会重新执行。因此,如果您将可更改数据置于反应值中,那么无论何时更改它都将重新运行observe()函数内的代码。

Mapper:scan