我想在一个选项中添加换行符,因为它太长了。关于按钮标签的类似问题的答案是将字符串 Package 在HTML()
中,但该解决方案似乎对choices
不起作用。
简单示例代码
library(shiny)
choices_vector <- c(
'Choice 1',
HTML('Choice 2 shoulde be<br />on two lines'),
'Choice 3'
)
ui <- fluidPage(
checkboxGroupInput(
inputId = 'choices_selec',
label = '',
choices = choices_vector
)
)
server <- function(input, output) {}
shinyApp(ui = ui, server = server)
字符串
原始示例代码
这是较旧的示例代码,并且更复杂。这里留下它是因为一个答案使用了这个例子的许多细节。
ui <- fluidPage(
splitLayout(cellWidths = c(170,80,160),
tagList(uiOutput("example")))
)
server <- function(input, output) {
choices_vector <- c("choice 1","choice 2",HTML("I want a line break here <br/> since the label is too long"),"choice 4")
output$example <- renderUI({
checkboxGroupInput(inputId = "choices_selec",
label = "", choices = choices_vector, selected = F)
})
}
# Run the application
shinyApp(ui = ui, server = server)
型
我还尝试使用using paste0
和collapse
(请参阅以下代码),并将uiOutput
更改为htmlOutput
,但结果是相同的
server <- function(input, output) {
choices_vector <- c("choice 1","choice 2",paste0(c("I want a line break here ", "since the label is too long"), collapse = "<p/>"),"choice 4")
output$example <- renderUI({
checkboxGroupInput(inputId = "choices_selec",
label = "", choices = choices_vector, selected = F)
})
}
型
2条答案
按热度按时间tp5buhyn1#
问题是
checkboxGroupInput
只接受字符串作为choices
。除非你修改Shiny的源代码否则我们什么都做不了试着跳出框框思考,为什么我们需要在R预处理级别上做这件事。我们可以使用js在客户端(浏览器)进行后处理。下面是如何做的,像往常一样,但只需在复选框后添加这个非常简单的js代码:
字符串
的数据
此代码将允许您使用任何HTML标记作为字符串输入。呈现复选框后将分析HTML。
我还将名称添加到选择向量中,这样您就可以在服务器端更好地了解选择了哪些选项。
hlswsv352#
choiceNames与选择
checkboxGroupInput()
的文档说明:使用[
choiceNames
和choiceValues
]而不是命名列表进行选择的优点是,choiceNames
允许通过任何类型的UI对象(标记对象,图标,HTML代码...),而不仅仅是简单的文本。换句话说,这是可行的:
字符串
但这并不:
型
不使用vector
在向
choiceNames
传递先前定义的列表时,需要记住的额外复杂性:首先,**在定义
choiceNames
**时使用list()
而不是c()
。vector的元素必须是相同的类型。因此,c('A', HTML('B'), 'C')
实际上没有任何HTML
元素。另外,我认为R不支持HTML元素的向量。其次,当手动将
HTML()
放入列表中不可行/不可取时,制作一个字符向量,然后使用lapply()
将每个元素更改为HTML
:型
工作示例
(Note使用
lapply
)型