我正在尝试在shinydashboard应用程序中创建和使用闪亮的模块,但我不断收到此错误:
Error in FUN(X[[i]], ...) : Expected an object with class 'shiny.tag'.
以下是尽可能缩小的应用程序:
library(shiny)
library(shinydashboard)
source("modules.r")
ui <- dashboardPage(
dashboardHeader(
title = "Shiny modules and shinydashboard"
),
dashboardSidebar(
sidebarMenu(
menuItem("PointA")
)
),
dashboardBody(
tabItems(
fooUI("myid")
)
)
)
server <- function(input, output) {
callModule(foo, "myid")
}
fooUI <- function(id) {
ns <- NS(id)
tagList(
tabItem(
tabName = "PointA",
textOutput(ns("text"))
)
)
}
foo <- function(input, output, session){
output$text <- renderText(
rnorm(1)
)
}
我做错了什么?我有其他类型的模块可以在“正常”闪亮的应用程序中工作,但是,每当我尝试在shinydashboard中使用模块时,它都会失败。
我使用的是R
,shiny
和shinydashboard
的最新版本。这不是问题所在。
答案 0 :(得分:2)
shinydashboard
和tagList
如上所述here
您需要简单使用
ui <- dashboardPage(
dashboardHeader(
title = "Shiny modules and shinydashboard"
),
dashboardSidebar(
sidebarMenu(
menuItem("PointA",tabName = "PointA")
)
),
dashboardBody(
tags$div( fooUI("myid"), class = "tab-content" )
)
)
tabName
menuItem
menuItem("PointA_",tabName = "PointA")
如你所见
tabItems
function (...)
{
lapply(list(...), tagAssert, class = "tab-pane")
div(class = "tab-content", ...)
}
<environment: namespace:shinydashboard>
将list
用于...
,如果您已将列表作为arg,则无法使用。
所以其他变种它创建了新的tabItems函数,如
tabItems1=function (...)
{
lapply(..., tagAssert, class = "tab-pane")
div(class = "tab-content", ...)
}
environment(tabItems1)=environment(tabItems)
然后您可以将tabItems1
与tagList
答案 1 :(得分:0)
按照@Batanichek的回答向我指出了问题的根源(谢谢),我只是删除了tagList()
定义中的fooUI
命令。这很方便地解决了这个问题!
答案 2 :(得分:0)
两件事:
UI
ui <- dashboardPage(
dashboardHeader(
title = "Shiny modules and shinydashboard"
),
dashboardSidebar(
sidebarMenu(
menuItem("PointA", tabName = "PointA")
)
),
dashboardBody(
tabItems(
tabItem("PointA",
fooUI("myid")
)
)
)
)
模块
fooUI <- function(id) {
ns <- NS(id)
tagList(
tabName = "PointA",
textOutput(ns("text"))
)
}
foo <- function(input, output, session){
output$text <- renderText(
rnorm(1)
)
}