2015-10-12 2 views
2

Я работаю над блестящим приложением, которое должно взять файл .Rdata как входной сигнал от пользователя и выполнить определенные операции над ним перед созданием вывода. Таким образом, в основном, после того, как пользователь выбирает файл, мне нужно загрузить данные и сохранить его содержимое, которое, как ожидается, будет объектом списка R в переменной для дальнейшего использования. Я пробовал много способов, но я просто не могу загрузить файл .Rdata или сохранить его в переменной. Может ли кто-нибудь помочь? Я знаю, что в прошлом вопрос был задан в прошлом, но ответы были неясны. Любая помощь будет высоко оценена.Загрузка Пользовательский ввод .Rdata on Shiny App

ответ

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") 

Было ли что-то подобное, что искали?

+2

Спасибо! Однако я использовал что-то более простое. Я просто загрузил данные в текущую среду, написав «load (inFile $ datapath, envir = environment())», и он сработал. –

+0

Хорошо, идея это еще проще. Надеюсь, это было полезно –