在Shiny App上加载用户输入.Rdata

时间:2015-10-12 00:48:05

标签: r shiny

我正在开发一个Shiny应用程序,需要将.Rdata文件作为用户的输入,并在生成输出之前对其执行某些操作。所以基本上,在用户选择文件之后,我需要加载数据并将其内容存储在变量中以供进一步使用,该内容应该是R列表对象。我尝试了很多方法,但我只是无法加载.Rdata文件或将其存储在变量中。有人可以帮忙吗?我知道这个问题在过去曾被问过,但答案尚不清楚。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:4)

如果您尝试使用new.env函数并将.Rdata加载到新环境中该怎么办。

library(shiny)
server <- function(input, output) {
  # Global variable to store loaded environment
  env <<- NULL

  load_Rdata <- function(){
    if(is.null(input$file)) return(NULL)
    inFile <- isolate({ input$file })

    # Create new environment to load data into
    n.env  <- new.env()
    env    <<- n.env
    load(inFile$datapath, envir=n.env)

    # Check if specified variable exists in environment
    if( !is.null(n.env$var) ){
      output$out <- renderPrint({ str(n.env$var) })
    }
    else{
      output$out <- renderPrint({ "No variable var in .Rdata file" })
    }
  }

  save_Rdata <- function(){
    if ( !is.null(env) ){
      env$new.var <- "My new variable"
      save(env, file="~/savedWorkspace.Rdata")
    }
    else{
      output$out <- renderPrint({ "No .Rdata file loaded" })
    }
  }

  observeEvent(input$btnLoad,{
    load_Rdata()
  })
  observeEvent(input$btnSave,{
    save_Rdata()
  })
}

ui <- shinyUI(fluidPage(
  fileInput("file", label = "Rdata"),
  actionButton(inputId="btnLoad","Load"),
  actionButton(inputId="btnSave","Save"),
  verbatimTextOutput("out")
))

shinyApp(ui = ui, server = server)

可以通过以下方式访问已保存的变量:

> load("~/savedWorkspace.Rdata")
> env$new.var
[1] "My new variable"

要加载的示例工作区可以创建为:

> var <- "My variable to load"
> save.image(file="~/myWorkspace.Rdata") 

你想要的是这样吗?