Может ли блестящий ввод считывать значения, загруженные из .Rdata? - PullRequest
0 голосов
/ 02 октября 2018

Пожалуйста, запустите приложение и попросите поместить что-то в соответствующие входы.Тогда, пожалуйста, сохраните объект.Вы найдете файл .Rdata, сохраненный в вашем рабочем каталоге.Вот моя проблема, которую я не могу понять.

В приведенном ниже приложении может блестящий ввод (например, input $ name, input $ age, input $ location и т. Д.) Считывать значения, сохраненные в .Rdata?

Я могу сохранить входные данные в файле .Rdata в моем рабочем каталоге.Однако, когда я загружаю файл обратно, есть ли способ заменить поля ввода значениями, хранящимися в файле .Rdata, иначе нет смысла сохранять их правильно?Это настольное приложение, которое мы будем запускать локально.Поэтому важно сохранять пользовательские данные в каждой точке.Однако проблема, когда мы загружаем файл .Rdata, в котором ранее были выбраны входные данные, мы не можем заменить блестящие входные данные этими значениями.Следовательно, я должен сделать эти выборы снова из блестящего ввода.Таким образом, сохраненный файл бесполезен.

library(shiny)
library(pryr)

ui <- function(request){
  fluidPage(
    titlePanel("Put title of the application"),
    sidebarLayout(
      sidebarPanel(
        textInput("name", "Type your name", ""),
        textInput("age", "Type your age", ""),
        radioButtons("gender", "Select your gender", list("Male", "Female"), ""),
        sliderInput("height", "Select your height", min =  5.0, max = 8.0, value = 5.2, step = 0.1),
        selectInput("location", "Select your location", choices = c("","Gurgaon", "Bangalore", "Mumbai")),
        actionButton("save_objs", "Save Objects"),
        actionButton("load_objs", "Load Objects"),
        bookmarkButton()
      ),

      mainPanel(
        textOutput("username"),
        textOutput("userage"),
        textOutput("usergender"),
        textOutput("userheight"),
        textOutput("userlocation"),
        textOutput("userload")
      )
    )
  )
}


server <- function(input, output, session) {
vals <- reactiveValues(name = NULL)
  output$username <- renderText(input$name)
  output$userage <- renderText(input$age)
  output$usergender <- renderText(input$gender)
  output$userheight <- renderText(input$height)
  output$userlocation <- renderText(input$location)

  observeEvent(input$save_objs, {
    # Run whenever save_objs button is pressed

    print("** saving objects! **")

    ## Print the objects being saved
    print(rls())
    # ## Put  objects into current environment
    for(obj in unlist(rls())) {
      if(class(get(obj, pos =  -1))[1] == "reactive"){
        ## execute the reactive objects and put them in to this 
        ## environment i.e. into the environment of this function
        assign(obj, value = eval(call(obj)))
      } else {
        ## grab the global variables and put them into this 
        ## environment
        assign(obj, value = get(obj, pos =  -1))
      }
    }

    input_copy <- list()
    for(nm in names(input)){
      # assign(paste0("input_copy$", nm), value <- input[[nm]])
      input_copy[[nm]] <- input[[nm]]
    }

    ## save objects in current environment
    save(list = ls(), file = "shiny_env.Rdata", envir = environment())

    print("** done saving     **")
  })


        observeEvent(input$load_objs, {
    # Run whenever load_objs button is pressed
    ## Load the objects
    f.loaddata <- function()
    {
      myenv <- new.env()
      load(file = file.choose(), envir = myenv)
      myenv
    }

    print("** About to load objects! **")
    # ## Put  objects into current environment
    some <- f.loaddata()
    #print(some$input_copy$name)
    vals$name <- some$input_copy$name
    vals$name <- input$name
    print("** done loading     **")
  })



}

shinyApp(ui, server, enableBookmarking = "server")

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете использовать reactiveValues для хранения input$*** и сохранения объекта reactiveValues в RData.

Если вы хотите загрузить файл RData, просто прочитайте его и дайте ему имятак же, как ваши reactiveValues имена переменных.

Вы можете видеть это блестящее приложение , оно сохраняет журнал чата людей в файл RDS (аналогично RData файлу).Вот как это работает в server.R:

vars <- reactiveValues(chat=NULL, users=NULL)

# Restore the chat log from the last session.

if (file.exists("chat.Rds")){
  vars$chat <- readRDS("chat.Rds")
} else {
  vars$chat <- "Welcome to Shiny Chat!"
}

Ваш код

Я делаю пример только на input$name и input$age.

library(shiny)
library(pryr)

ui <- function(request){
  fluidPage(
    titlePanel("Put title of the application"),
    sidebarLayout(
      sidebarPanel(
        textInput("name", "Type your name", ""),
        textInput("age", "Type your age", ""),
        radioButtons("gender", "Select your gender", list("Male", "Female"), ""),
        sliderInput("height", "Select your height", min =  5.0, max = 8.0, value = 5.2, step = 0.1),
        selectInput("location", "Select your location", choices = c("","Gurgaon", "Bangalore", "Mumbai")),
        actionButton("save_objs", "Save Objects"),
        actionButton("load_objs", "Load Objects"),
        bookmarkButton()
      ),

      mainPanel(
        textOutput("username"),
        textOutput("userage"),
        textOutput("usergender"),
        textOutput("userheight"),
        textOutput("userlocation"),
        textOutput("userload")
      )
    )
  )
}


server <- function(input, output, session) {
  vals <- reactiveValues()

  output$username <- renderText(input$name)
  output$userage <- renderText(input$age)
  output$usergender <- renderText(input$gender)
  output$userheight <- renderText(input$height)
  output$userlocation <- renderText(input$location)

  isolate({
    vals$name=input$name
    vals$age=input$age
  })

  observeEvent(c(vals$name,vals$age),{
    updateTextInput(session,"name",label="Type your name",value=vals$name)
    updateTextInput(session,"age",label="Type your age",value=vals$name)
  })

  observeEvent(input$save_objs, {
    # Run whenever save_objs button is pressed
    vals$username<-input$name
    vals$userage<-input$age
    vals$usergender<-input$gender
    vals$userheight<-input$height
    vals$userlocation<-input$location
    print("** saving objects! **")

    ## Print the objects being saved
    print(rls())
    # ## Put  objects into current environment
    for(obj in unlist(rls())) {
      if(class(get(obj, pos =  -1))[1] == "reactive"){
        ## execute the reactive objects and put them in to this 
        ## environment i.e. into the environment of this function
        assign(obj, value = eval(call(obj)))
      } else {
        ## grab the global variables and put them into this 
        ## environment
        assign(obj, value = get(obj, pos =  -1))
      }
    }

    input_copy <- list()
    for(nm in names(input)){
      # assign(paste0("input_copy$", nm), value <- input[[nm]])
      input_copy[[nm]] <- input[[nm]]
    }

    ## save objects in current environment
    save(list = ls(), file = "shiny_env.Rdata", envir = environment())

    print("** done saving     **")
  })


  observeEvent(input$load_objs, {
    # Run whenever load_objs button is pressed
    ## Load the objects
    f.loaddata <- function()
    {
      myenv <- new.env()
      load(file = file.choose(), envir = myenv)
      myenv
    }

    print("** About to load objects! **")
    # ## Put  objects into current environment
    some <- f.loaddata()
    #print(some$input_copy$name)
    vals$name <- some$input_copy$name
    vals$age <- some$input_copy$age
    # vals$name <- input$name
    print("** done loading     **")
  })

}

shinyApp(ui, server, enableBookmarking = "server")
...