【问题标题】:Trigger inputPanel() after rendering previous plot in R markdown在 R markdown 中渲染上一个绘图后触发 inputPanel()
【发布时间】:2014-12-09 09:16:59
【问题描述】:

我正在创建一个如下所示的交互式 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() 正在填充一个空向量,即它的初始值。

我的假设是否正确,如果正确,有什么方法可以在之前的renderPlot() 之后触发inputPanel()

编辑:我意识到我没有给出一个可重现的例子,很快就会为我的代码创建一个合适的替代方案。对此感到抱歉,但感谢您提供任何帮助! 编辑 2:似乎可行的第二种解决方法 - 我在 R 脚本本身(file2.R)中创建了绘图对象,导致整个处理在源代码上发生。这将需要用户等待一段时间才能出现任何内容,但至少信息会正确出现。

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

【问题讨论】:

    标签: r shiny r-markdown


    【解决方案1】:

    正如您所提到的,如果没有可重现的示例,很难确切地知道发生了什么并尝试解决它。但听起来你的假设是正确的 IMO。

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

    【讨论】:

    • 虽然我很想避免走这条路,但似乎这是唯一的选择!会试一试。
    猜你喜欢
    • 2023-04-10
    • 2012-03-19
    • 2020-07-29
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多