#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:
- Не вкладывайте один реактивный блок в другой.
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 .