Отображение содержимого файла в приборной панели 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)
Другие вопросы по тегам