Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
renderUI在渲染之前不会进行计算_R_Shiny - Fatal编程技术网

renderUI在渲染之前不会进行计算

renderUI在渲染之前不会进行计算,r,shiny,R,Shiny,我正在创建一个闪亮的应用程序,通过renderUI创建selectInput动态填充一个反应式函数。selectInput位于单独的“配置”选项卡面板中。 我注意到,在运行应用程序后,输入$id值保持为空,直到我单击uiOutput()所在的选项卡面板。然后,在渲染后,输入$id将被指定“选定”值 我试着在需要的地方使用req(input$id),但它不起作用。如果我尝试在调试控制台中运行req(input$id),返回的错误只是“error:”。我也试过使用shinydashboard,但得到

我正在创建一个闪亮的应用程序,通过renderUI创建selectInput动态填充一个反应式函数。selectInput位于单独的“配置”选项卡面板中。 我注意到,在运行应用程序后,输入$id值保持为空,直到我单击uiOutput()所在的选项卡面板。然后,在渲染后,输入$id将被指定“选定”值

我试着在需要的地方使用req(input$id),但它不起作用。如果我尝试在调试控制台中运行req(input$id),返回的错误只是“error:”。我也试过使用shinydashboard,但得到了相同的行为

我创建了一个最小的可复制示例。选项卡面板“A”中的文本输出应显示selectInput的选项。但在第二个选项卡面板上单击之前,它不会显示任何内容

库(闪亮)

ui这是shiny中延迟加载的原因

看看:

但是,您必须告诉R运行expression才能实现这一点,因为R使用了一种称为惰性计算的执行方式。换句话说,在您强制执行表达式之前,R不会执行它

因此,您必须强制
renderUI
进行计算。这意味着用户为
textOutput
获得有效输入的唯一方法是使用
reactive
提供默认值,该值在呈现
input$choice
后立即更新

这里我已经为反应变量
d
添加了例如
反应值

库(闪亮)

用户界面添加到服务器:
输出选项(输出,“选择”,suspendWhenHidden=FALSE)
谢谢。这是可行的,但只有在将输出分配到服务器之后才能进行。我想我更喜欢这种方法,因为它涉及的代码更少。虽然这种方法非常有效,但我更喜欢@ryan morton建议的方法,因为它涉及的代码更少。感谢您快速的回答和解释,我知道用reactive({})包装的表达式将被延迟执行,它的工作方式类似于函数,只在像f()一样调用它之后才执行。但是renderUI({…})是如何工作的呢?当然,它不会使用类似于f()的语句执行。那么,它是在用户通过UI修改某些内容后执行的吗?那么,没有任何默认值是没有意义的。
reactive
急切地求值,
renderUI
懒惰地求值。因此,
reactive
作为默认值,只要不执行
renderUI
。在这个特定的场景中,为
reactive
提供一个默认值是非常有意义的,而如果直接执行
rendedUI
则没有意义(例如,将其移动到TabPanel 1或将输出选项
suspendWhenHidden
设置为
FALSE