我正在尝试从文本文件中为闪亮的仪表板显示用户的帮助。但是我无法控制新行的显示(“\ n”)。它们在文本文件和文本中,但闪亮不想显示它们。
感谢您的帮助
答案 0 :(得分:1)
Shiny将所有元素转换为HTML,不会呈现换行符(\n
)。为了创建换行符,您可以使用p()
函数将每行包装在一组HTML段落标记中。
这意味着您需要在应用中使用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)