如何将列表放入下拉菜单?
How to put list into dropdownMenu?
我想制作一个通知列表并以编程方式将其放入下拉列表中。 dropdownMenu
有一个 .list
参数,它应该服务于这种机制。我创建了一个列表并尝试将其放入此下拉列表中,但出现了错误。以下是正确的做法吗?
示例取自 r bs4Dash documentary for dropdownMenu,我只是添加了一个列表:
if (interactive()) {
library(shiny)
library(bs4Dash)
library(dplyr)
shinyApp(
ui = dashboardPage(
header = dashboardHeader(
rightUi = tagList(
dropdownMenu(
type = "messages",
badgeStatus = "danger",
icon = icon("comments"),
.list = list(verbatimTextOutput(outputId = "listIris"))
),
dropdownMenu(
type = "messages",
badgeStatus = "danger",
icon = icon("comments"),
messageItem("Message from driver Adrian Baker",
"Customer closed",
time = "5 mins ago"),
messageItem("Message from driver Louis Plitz",
"Huge traffic, I'll be late",
time = "8 mins ago")))
),
sidebar = dashboardSidebar(disable = TRUE),
controlbar = dashboardControlbar(),
footer = dashboardFooter(),
title = "dropdownMenu",
body = dashboardBody()
),
server = function(input, output) {
observeEvent(input$triggerAction1, {
showModal(modalDialog(
title = "Important message",
"This is an important message!"
))
})
# df with unique text values
df <- iris %>%
select(Species) %>%
group_by(Species) %>%
unique()
# create a list
uniqueList <- as.list(df)
output$listIris <- renderPrint({
uniqueList
})
}
)
}
有两种类型的错误:
Error in writeImpl: Text to be written must be a length-one character
vector
和
Error in cat: argument 1 (type 'list')..
编辑: 我根据@Stephane 的解决方案更改了上面的代码。我现在可以生成列表,但不是以正确的形式。当您 运行 上面的代码时,您将看到两个下拉列表(在 header 的右侧):第一个 - 从 .list
生成,第二个 - 手动生成(使用 messageItem
).您可以比较这两个下拉列表——我的目标是以编程方式生成列表,但采用第二个下拉列表的漂亮形式。如何以编程方式将列表元素放入 messageItem
中?以及如何向每个 messageItem
添加唯一的 inputId
以使其表现得像 actionButton
(根据说明可能的文档)?
verbatimTextOutput
的“id”参数是 outputId
:试试 verbatimTextOutput(outputId = "listIris")
根据文档,dropdownMenu
的 .list
参数必须是一个列表:尝试 .list = list(verbatimTextOutput(outputId = "listIris"))
renderText
用于渲染字符串,这里有一个列表;使用 renderPrint
代替:renderPrint({uniqueList})
(没有 print()
)
我想制作一个通知列表并以编程方式将其放入下拉列表中。 dropdownMenu
有一个 .list
参数,它应该服务于这种机制。我创建了一个列表并尝试将其放入此下拉列表中,但出现了错误。以下是正确的做法吗?
示例取自 r bs4Dash documentary for dropdownMenu,我只是添加了一个列表:
if (interactive()) {
library(shiny)
library(bs4Dash)
library(dplyr)
shinyApp(
ui = dashboardPage(
header = dashboardHeader(
rightUi = tagList(
dropdownMenu(
type = "messages",
badgeStatus = "danger",
icon = icon("comments"),
.list = list(verbatimTextOutput(outputId = "listIris"))
),
dropdownMenu(
type = "messages",
badgeStatus = "danger",
icon = icon("comments"),
messageItem("Message from driver Adrian Baker",
"Customer closed",
time = "5 mins ago"),
messageItem("Message from driver Louis Plitz",
"Huge traffic, I'll be late",
time = "8 mins ago")))
),
sidebar = dashboardSidebar(disable = TRUE),
controlbar = dashboardControlbar(),
footer = dashboardFooter(),
title = "dropdownMenu",
body = dashboardBody()
),
server = function(input, output) {
observeEvent(input$triggerAction1, {
showModal(modalDialog(
title = "Important message",
"This is an important message!"
))
})
# df with unique text values
df <- iris %>%
select(Species) %>%
group_by(Species) %>%
unique()
# create a list
uniqueList <- as.list(df)
output$listIris <- renderPrint({
uniqueList
})
}
)
}
有两种类型的错误:
Error in writeImpl: Text to be written must be a length-one character vector
和
Error in cat: argument 1 (type 'list')..
编辑: 我根据@Stephane 的解决方案更改了上面的代码。我现在可以生成列表,但不是以正确的形式。当您 运行 上面的代码时,您将看到两个下拉列表(在 header 的右侧):第一个 - 从 .list
生成,第二个 - 手动生成(使用 messageItem
).您可以比较这两个下拉列表——我的目标是以编程方式生成列表,但采用第二个下拉列表的漂亮形式。如何以编程方式将列表元素放入 messageItem
中?以及如何向每个 messageItem
添加唯一的 inputId
以使其表现得像 actionButton
(根据说明可能的文档)?
verbatimTextOutput
的“id”参数是outputId
:试试verbatimTextOutput(outputId = "listIris")
根据文档,
dropdownMenu
的.list
参数必须是一个列表:尝试.list = list(verbatimTextOutput(outputId = "listIris"))
renderText
用于渲染字符串,这里有一个列表;使用renderPrint
代替:renderPrint({uniqueList})
(没有print()
)