2017-04-12 107 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