在Shiny运行时模式下将上传的文件保存为RMD上的数据帧

时间:2018-02-20 03:11:02

标签: r shiny rstudio r-markdown

我正在享受RMD在统计和数据分析方面的无限可能性。我已经学会了使用knitr通过RStudio使用RMarkdown进行这样的分析。现在我希望用户通过浏览器上传他们的文件,并将读取的数据传递给数据帧以进行进一步分析。当我有ui.R和server.R时,我可以这样做。但不幸的是,我无法使用RMD将其传递给Shiny运行时模式中的数据帧变量。我需要处理这个数据帧并在RMD中显示一些静态图,作为单独的块。在这些块之间,我有标题,文本。

我使用的代码如下:

---
title: "shinyRMD"
output: html_document
runtime: shiny
---

```{r echo=FALSE}
library(shiny)
inputPanel(
    fileInput('file1', 'Choose a file to upload',
            accept = c(
              'text/csv',
              'text/comma-separated-values',
              'text/tab-separated-values',
              'text/plain',
              '.csv',
              '.tsv'
            )
    )
)
renderDataTable({    
    if(is.null(input$file1))return()
    inFile <- input$file1
    data2<-read.csv(inFile$datapath, stringsAsFactors=FALSE)
    assign('dataread',data2,envir=.GlobalEnv)
    save(dataread, file = "dataread.RData")
})

#df<-dataread
#df<-data2
```

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

我认为您无法从shiny session分配给用户的全局环境,但save确实有效:

rv <- reactiveValues(data = NULL)

observe( {
  req(input$file1)

  inFile <- input$file1
  data2 <- read.csv(inFile$datapath, stringsAsFactors=FALSE)
  save(data2, file = "dataread.RData")

  rv$data <- data2
})

DT::renderDataTable({
  req(rv$data)
  rv$data
})

此功能更适合Shiny gadgets。 (运行应用程序,执行某些操作,获取返回值)

您可以定义名为myGadgetFunc的函数。然后通过在RStudio中运行my_data <- myGadgetFunc(),用户可以上传文件,在tableOutput中查看其内容,点击done后,returnValue会被分配到{{1}在my_data

global environment