2017-04-12 101 views
0

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

--- 
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 

任何想法如何,我可以使这项工作?

+1

将文件放在一个'无功阅读'然后在任何需要的地方使用它 – HubertL

+0

谢谢。但反应只能部分解决问题。我最初的例子可能太简单了,所以稍微将它扩展了三分之一。新的例子仍然很常见,但不起作用,因为它会导致相同的错误。 – MarkusK

回答

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()) 
``` 
+0

我明白了。但接下来的问题是,如果我在第一个renderPlot函数中实现了一个功能,让我们说“customPlot(){...}”我无法在第二个renderPlot函数中调用该函数。纠正我,如果我错了:)。 – MarkusK

+1

这不是问题,只需在您的renderPlot函数中使用一个反应函数来实现此功能 – HubertL