在R markdown中渲染上一个绘图后触发inputPanel()

时间:2014-12-09 09:16:59

标签: r shiny r-markdown

我正在创建一个如下所示的交互式降价文档:

---
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)中创建了绘图对象,导致整个处理在源上发生。这将需要用户在出现任何问题之前等待一段时间,但至少信息是正确的。

仍然在寻找更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

正如你所提到的,很难确切地知道发生了什么,并试图在没有可重复的例子的情况下解决它。但听起来你的假设是正确的IMO。

我能想到的一个解决方案" /解决方法是将您的Shiny代码分成一个ui和一个服务器部分,as described here。然后,您可以使用renderUI更好地控制何时显示数据。