Отображение содержимого файла в приборной панели Shiny
Я пытаюсь отобразить справку для пользователя в блестящей приборной панели из текстового файла. Однако я не могу контролировать отображение новых строк ("\n"). Они находятся в текстовом файле и в тексте, но блестящие не хотят отображать их.
Спасибо за помощь
1 ответ
Решение
Shiny преобразует все элементы в HTML, который не отображает перевод строки (\n
) персонаж. Чтобы создать разрыв строки, вы можете заключить каждую строку в набор тегов абзаца HTML, используя p()
функция.
Это означает, что вместо использования renderText()
а также textOutput
вам нужно будет использовать renderUI
а также uiOutput
в вашем приложении.
Полный пример того, как преобразовать символы новой строки в теги абзаца, приведен ниже.
require(stringi)
require(shiny)
# write text file with standard newline characters
str <- 'These are words\nwith newline characters\n\nthat do not render.'
write(x = str, file = 'Data.txt')
ui <- fluidPage(
h4('Reading raw text from file:'),
textOutput('textWithNewlines'), # text with newline characters output
h4('Converting text to list of paragraph tags'),
uiOutput('textWithHTML') # ui output as a list of HTML p() tags
)
server <- function(input,output){
output$textWithNewlines <- renderText({
rawText <- readLines('Data.txt')
return(rawText)
})
### SOLUTION ###
output$textWithHTML <- renderUI({
rawText <- readLines('Data.txt') # get raw text
# split the text into a list of character vectors
# Each element in the list contains one line
splitText <- stringi::stri_split(str = rawText, regex = '\\n')
# wrap a paragraph tag around each element in the list
replacedText <- lapply(splitText, p)
return(replacedText)
})
}
shinyApp(ui=ui, server=server)