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