【问题标题】:Shiny and RMarkdown: Rendering multiple chunksShiny 和 RMarkdown:渲染多个块
【发布时间】:2017-04-12 13:38:12
【问题描述】:

我想创建一个允许上传自己的数据集的 Shiny-RMarkdown 应用程序。数据集有时不仅会影响一个可以通过 renderPlot() (或类似方法)重新渲染的块,有时还会影响两个或更多块。请参阅以下示例:

---
title: Render multiple chunks
output: html_document
runtime: shiny
---

```{r echo=FALSE}
library(shiny)
fileInput('file1', 'Choose your own CSV File instead of provided 
data',accept=c('text/csv', 'text/comma-separated-values,text/plain', 
'.csv'))

go1<-reactive({
  dpath <- "CurrentBiologyData.txt"
  if(!is.null(input$file1)){
     dpath <- input$file1$datapath
  }
  CB.dat <- read.table(dpath, header = TRUE)  #choose 'CurrentBiologyData.txt'
  plot(CB.dat)
})
```

```{r echo=FALSE}
renderPlot({
      go1()
})
```

```{r}
   renderPlot({
   print(CB.dat)
   }) 
```

所以如果我上传一个新数据集,我有三个块会受到影响。问题是第三块没有看到填充在第一块中的CB.dat:

Error: Object 'CB.dat' not found

有什么想法可以让它发挥作用吗?

【问题讨论】:

  • 将读取的文件放入reactive,然后在需要的地方使用它
  • 谢谢。但是响应式只能部分解决问题。我最初的例子可能太简单了,所以稍微扩展了第三块。新示例仍然是一个常见示例,但无法正常工作,因为它会导致相同的错误。

标签: shiny r-markdown chunks


【解决方案1】:

将我在评论中的意思应用到您的示例中

将读取的文件放入响应式中,然后在需要的地方使用它

---
title: Render multiple chunks
output: html_document
runtime: shiny
---

```{r echo=FALSE}
library(shiny)
fileInput('file1', 'Choose your own CSV File instead of provided 
data',accept=c('text/csv', 'text/comma-separated-values,text/plain', 
'.csv'))

CB.dat<-reactive({
  dpath <- "CurrentBiologyData.txt"
  if(!is.null(input$file1)){
     dpath <- input$file1$datapath
  }
  read.table(dpath, header = TRUE)  #choose 'CurrentBiologyData.txt'
})
```

```{r echo=FALSE}
renderPlot(plot(CB.dat())
```

```{r}
renderTable(CB.dat())
```

【讨论】:

  • 我明白了。但下一个问题是,如果我在您的第一个 renderPlot 函数中实现一个功能,比如说“customPlot(){...}”,我无法在第二个 renderPlot 函数中调用该函数。如果我错了,请纠正我:)。
  • 这不是问题,只需使用您在两个 renderPlot 函数中使用的反应函数来实现此功能
猜你喜欢
  • 1970-01-01
  • 2019-06-09
  • 2015-12-15
  • 2021-12-29
  • 2017-09-17
  • 2017-08-26
  • 2016-05-28
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多