在 shiny reactive 的设定下,代码块的执行顺序可以是任意的,主要看各个组件的状态和之间的连接关系,所以这里 renderUI 和 observe 的执行顺序没有必然的先后关系。
要解决这个问题首先需要把 shiny 文档中 Reactivity - An overview 和 Execution scheduling 这两个文章理解到位。再有就是用 reactlog 看看运行时的关系和设想的是否相同。
另外 app 规模大了以后要解决这种问题,一个单独抽象出来的最小可重现例子是有必要的。