Использование сканирования в реактивном утверждении
Я пытаюсь написать простую программу на R, используя Shiny. Программа читает текстовые файлы, выбранные пользователем, а затем отображает это как объект.html. Я использую функцию "сканирования" для чтения текстового файла (NB в настоящее время только пытается вывести первую строку). Программа запускается, но вывод не обновляется. Почему вывод не обновляется? Благодарю.
library(shiny)
shinyApp(
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("text_file", "Choose text file",
multiple = FALSE,
accept = c(".txt")
)
),
mainPanel(htmlOutput("example"))
)
),
server <- function(input, output, session){
text <- reactive({
req(input$text_file)
x <- scan(input$text_file, what = "string", sep = "\n")[1]
})
# text output
output$example <- reactive({
renderUI({
HTML(x)
})
})
}
)
shinyApp(ui, server)
1 ответ
Решение
Необходимо внести некоторые изменения:
- Файл, читающий файл, вы должны попросить файл для чтения
input$inputId$datapath
и неinput$inputId
, - Ваш
renderUI()
должен вернутьсяtext()
и неx
, какtext()
Ваш реактивный объект отображается - Вам не нужно добавлять
reactive()
любомуrender
функции блестящие, так как они уже реактивные.
Измените свой сервер на следующее:
server <- function(input, output, session){
text <- reactive({
req(input$text_file)
x <- scan(input$text_file$datapath, what = "string", sep = "\n")[1]
})
# text output
output$example <- renderUI({
HTML(text())
})
}