我正在享受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
```
任何帮助表示感谢。
答案 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