Как извлечь переменные из фрейма данных reactiveValues R Shiny

#r #shiny

#r #блестящий

Вопрос:

Я пишу приложение, для которого требуются метаданные, и считываю файл метаданных в R с помощью Shiny. Мне нужно иметь возможность получить доступ к столбцам в этом файле (например, TZ или часовой пояс) позже. Вот мой код для чтения файла и отображения его с помощью DT: renderDataTable:

   # This uploads amp; displays the Metadata file
  metadata <- reactiveValues()
  observeEvent(input$metadataUpload, {
    output$metadataTable <- renderDataTable({
     metadata <- read.csv(input$metadataPath)}, editable = T, filter = 'top',
    )
  })
  

После считывания это переменная «метаданные», но по какой-то причине я не могу получить доступ к переменным во фрейме данных (продолжайте возвращать значение NULL). Разве я не должен иметь доступ к различным переменным с помощью кода, такого как metadata $ TZ? Если нет, то как мне получить доступ к этим переменным?

Ответ №1:

  1. Не вкладывайте один реактивный блок в другой.
  2. renderDataTable не возвращает data.frame, он принимает фрейм (или фреймоподобный объект) в качестве входных данных и преобразует его в содержимое в формате HTML для представления в среде shiny.

Я думаю, вам нужно что-то вроде одного из следующих:

   metadata <- reactiveVal() # treat metadata like a getter/setter function
  observeEvent(input$metadataUpload, {
    tmpdat <- read.csv(input$metadataPath)}, editable = T, filter = 'top')
    metadata(tmpdat)
  })
  output$metadataTable <- renderDataTable({
    metadata()
  })
  

или

   metadata <- reactiveValues() # treat metadata like a "named list"-like object
  observeEvent(input$metadataUpload, {
    metadata$something <- read.csv(input$metadataPath)}, editable = T, filter = 'top')
    # now, 'something' is a frame within the named list 'metadata'
  })
  output$metadataTable <- renderDataTable({
    metadata$something
  })
  

Я предлагаю вам прочитать https://shiny.rstudio.com/reference/shiny/1.5.0/reactiveValues.html .