我正在创建一个如下所示的交互式降价文档:
---
title: "xxxxxxxxxx"
author: "xxxxxxxxxx"
date: "xxxxxxxxxx"
output: html_document
runtime: shiny
---
```{r, echo=FALSE}
require(shiny)
textInput("abcd", "Enter the abcd", value = "xxxxxxxxx")
source("file1.r")
source("file2.R")
renderPlot({
segID = input$abcd
segPlot = getSegPlot(segID)
segPlot
})
renderPlot({
segID = input$abcd
geoPlot = getGeoPlot()
geoPlot
})
renderPlot({
segID = input$abcd
wPlot = getWplot()
wPlot
})
inputPanel(
selectInput("selectedRegion", label = "Select Region", choices = as.list(getWnames()), selected = getWnames()[1])
)
```
当我运行此选项时,selectInput选项不会被填充。 getWnames()
返回一个在调用getWplot()
函数时填充在全局范围内的向量(在前一个renderplot()
中)。我认为,由于getWplot()
需要一些时间来评估,getWnames()
会填充一个空的向量,即它的初始值。
我的假设是否正确,如果是,是否有任何方法可以在上一次inputPanel()
之后触发renderPlot()
?
编辑:我意识到我没有给出一个可重现的例子,很快就会为我的代码创建一个合适的替代品。对不起,但任何帮助表示赞赏! 编辑2:似乎有效的第二种解决方法 - 我在R脚本本身(file2.R)中创建了绘图对象,导致整个处理在源上发生。这将需要用户在出现任何问题之前等待一段时间,但至少信息是正确的。
仍然在寻找更优雅的解决方案。
答案 0 :(得分:0)
正如你所提到的,很难确切地知道发生了什么,并试图在没有可重复的例子的情况下解决它。但听起来你的假设是正确的IMO。
我能想到的一个解决方案" /解决方法是将您的Shiny代码分成一个ui和一个服务器部分,as described here。然后,您可以使用renderUI更好地控制何时显示数据。