r - 在 HTML 中呈现分组列表
问题描述
我正在尝试按组(分组或嵌套)制作 HTML 详细元素。该函数div_detail_each
格式化一行并存储为 shiny.tag 类。之后,我按组嵌套并将标签与unify_divs
.
我用mtcars
. uiOutput
不符合预期的 HTML ;print
在插入 HTML 语句以检查它是否正确呈现之前,我做了一个控制台。
似乎列表元素与htmltools
.
希望有人可以帮助我。
library(shiny)
library(broom)
df <- mtcars %>%
mutate(
DETAIL = pmap(
.l = list(mpg, hp),
.f = ~ div_detail_each(..1, ..2)
)
) %>%
group_by(
cyl
) %>%
nest() %>%
mutate(
detail = map(
.x = data,
.f = ~ unify_divs(.x$DETAIL)
)
) %>%
select(
cyl, detail
)
div_detail_each <- function(mpg, hp, ...){
mydiv <- div(
class = "child", id = "child",
strong("detailed info: "),
paste0(
"mpg:", mpg, ", hp:", hp
)
)
if(hp < 90) {
mydiv <- tagAppendAttributes(
mydiv,
style = 'color:red'
)
}
return(mydiv)
}
unify_divs <- function(children_list){
mydiv <- div(class = "parent", id = "container")
mydiv <- tagSetChildren(mydiv, children_list)
mydiv
}
ui <- fluidPage(
fluidRow(
actionButton("do", "Do")
),
fluidRow(
uiOutput("detail")
)
)
server <- function(input, output, session){
observeEvent(input$do, {
output$detail <- renderUI({
map(seq_len(nrow(df)), function(i) {
print(df[i, 2][[1]])
fluidRow(
valueBox(
value = as.character(df[i, 2][[1]]),
subtitle = "Details",
width = 12
)
)
})
})
})
}
shinyApp(ui, server)
解决方案
我发现了一个有点混乱的解决方案,改变这条线
lapply(df[i, 2], function(x) HTML(as.character(x[[1]])))
但是在地图中放一个 lapply 似乎是无稽之谈
library(shiny)
library(broom)
df <- mtcars %>%
mutate(
DETAIL = pmap(
.l = list(mpg, hp),
.f = ~ div_detail_each(..1, ..2)
)
) %>%
group_by(
cyl
) %>%
nest() %>%
mutate(
detail = map(
.x = data,
.f = ~ unify_divs(.x$DETAIL)
)
) %>%
select(
cyl, detail
)
div_detail_each <- function(mpg, hp, ...){
mydiv <- div(
class = "child", id = "child",
strong("detailed info: "),
paste0(
"mpg:", mpg, ", hp:", hp
)
)
if(hp < 90) {
mydiv <- tagAppendAttributes(
mydiv,
style = 'color:red'
)
}
return(mydiv)
}
unify_divs <- function(children_list){
mydiv <- div(class = "parent", id = "container")
mydiv <- tagSetChildren(mydiv, children_list)
mydiv
}
ui <- fluidPage(
fluidRow(
actionButton("do", "Do")
),
fluidRow(
uiOutput("detail")
)
)
server <- function(input, output, session){
observeEvent(input$do, {
output$detail <- renderUI({
map(seq_len(nrow(df)), function(i) {
print(df[i, 2][[1]])
fluidRow(
column(2 ,paste0("group ", i)),
column(10,
lapply(df[i, 2][[1]], function(x) HTML(as.character(x)))
#lapply(df[i, 2], function(x) HTML(as.character(x[[1]])))
#value = lapply(df[i, 2][[1]], as.character)
#value = as.character(df[i, 2][[1]])
)
)
})
})
})
}
shinyApp(ui, server)
推荐阅读
- java - 如何配置嵌套的多模块 gradle 项目
- python - 要在 html 上显示的 Python 函数结果
- r - 如何创建 R Markdown 文件并将字符串变量附加到 R Markdown 文档
- docker - 首先在 localhost 上查找 docker FROM base image
- spring - 尽管存在额外的内置错误,但带有 Spring Cloud Contract 测试的 CDC 始终为绿色。为什么?
- java - 如何在上传内容时限制用户
- java - 使用java从svg字符串中获取属性值
- java - 使用 PDFBox 更改现有 pdf 文档的字体样式
- swagger - OpenApi 生成器不允许内容中有多个模式
- html - 删除 Internet Explorer 折叠表中 TD 单元格的边框