Как получить доступ к данным, хранящимся в server.R, за пределами сервера / пользовательского интерфейса - PullRequest
0 голосов
/ 11 июня 2019

Я довольно новичок в R / Rshiny / RMarkdown, и я взял несколько базовых пользовательских шаблонов ввода для создания приложения. Я хочу, чтобы пользователь ввел путь к файлу и мог вызывать имя файла и путь к файлу в другой функции / чанке.

Я пришел к выводу, что реактивная функция, вероятно, является ключевой функцией для этого, но я не совсем уверен, как ее использовать.

library(shinyFiles)


  ui <- fluidPage(
    shinyFilesButton("Btn_GetFile", "Choose a file" ,
                                    title = "Please select a file:", multiple = TRUE,
                          buttonType = "default", class = NULL),

              textOutput("filename"), 
              textOutput("txt_file")
                   )

  filepath <- reactiveValues() #trying, but this isn't quite working
  server <- function(input,output,session){

    volumes = getVolumes()
    observe({  
    shinyFileChoose(input, "Btn_GetFile", roots = volumes, session = session)

    if(!is.null(input$Btn_GetFile)){
      # browser()
      file_selected<-parseFilePaths(volumes, input$Btn_GetFile)
      output$txt_file <- renderText(as.character(file_selected$datapath))
      output$filename <- renderText(as.character(file_selected$name))
      filepath <- reactive({output$txt_file}) #an attempt, but it isn't doing what I want.
    }
  })
  }

  shinyApp(ui = ui, server = server)
  isolate(filepath) #also tried print. Really just trying to see if filepath is populated

Если пользователь вводит /Users/Jim/tmp.txt, я бы хотел, чтобы пользовательский интерфейс показывал /Users/Jim/tmp.txt и tmp.txt (что он делает), а также видел, что / Users / Jim / tmp.txt был сохранен как переменная filepath, к которой я могу получить доступ в другом месте.

1 Ответ

1 голос
/ 11 июня 2019

Посмотрите на ?reactiveValues. Изменен ваш код, и это должно работать: РЕДАКТИРОВАТЬ Исходя из вашего комментария, вы можете попробовать команду system() в сочетании с пакетом glue

library(shinyFiles)
library(glue)

ui <- fluidPage(
  shinyFilesButton("Btn_GetFile", "Choose a file" ,
                   title = "Please select a file:", multiple = TRUE,
                   buttonType = "default", class = NULL),

  textOutput("filename"), 
  textOutput("txt_file")
)

rvs <- reactiveValues() #renamed to rvs
server <- function(input,output,session){

  volumes = getVolumes()
  observe({  
    shinyFileChoose(input, "Btn_GetFile", roots = volumes, session = session)

    req(input$Btn_GetFile)

    file_selected <- parseFilePaths(volumes, input$Btn_GetFile)
    output$txt_file <- renderText(as.character(file_selected$datapath))
    output$filename <- renderText(as.character(file_selected$name))
    rvs$filepath <- as.character(file_selected$datapath)
    print(rvs$filepath) #Added this print to test

  })
}
observe({
  req(rvs$filepath)
  system(glue("echo {rvs$filepath}"))
})
shinyApp(ui = ui, server = server)
...