Jab*_*key 5 r shiny shinydashboard
闪亮模块环境的新手,我正在尝试设置一个基本脚手架,以将 UI 的选项卡式组件和其他组件从 ui.r 和 server.r 中分离出来
目前我有以下4个文件:
用户界面
navbarPage(id = "main", windowTitle = "Dashboard Title", position =
"fixed-top", header = "Header Text?", title = "Application Logo <To Do>",
navbarMenu("Company Dashboards", icon = icon("dashboard"),
tabPanel(title = "Sales", value = "SalesModule", icon = icon("bar-chart-o"), salesModuleUI("SalesModule")))
Run Code Online (Sandbox Code Playgroud)
服务器.r
shinyServer(function(input, output, session){
### Modules
callModule(module = salesModule, id = "SalesModule")
})
Run Code Online (Sandbox Code Playgroud)
全局.r
#######
# Libraries
#######
library(shiny)
library(shinydashboard)
library(dplyr)
library(highcharter)
library(DT)
#######
# Source Files
#######
source("modules/salesModule.r")
Run Code Online (Sandbox Code Playgroud)
销售模块.r
salesModuleUI <- function(id){
ns <- NS(id)
}
######
# salesDashboard Server
######
salesModule <- function(input,output,session){
ns <- session$ns
}
Run Code Online (Sandbox Code Playgroud)
如果我从 ui.r 中删除“value = salesModule”和 salesModuleUI 调用,则应用程序加载正常。一旦我添加这些内容以使用 salesModuleUI 填充选项卡面板(任一 UI 现在应该为空),我就会收到错误:
警告:as.character 中的错误:无法将类型“closure”强制转换为“character”类型的向量
我尝试查看: r 闪亮错误 as.vector(x, "character") 中的错误:无法强制类型 'closure' 为 'character' 类型的向量
但这个问题似乎与代码中的反应性调用有关,我还没有为此添加反应性。我还评论了: https: //github.com/FrissAnalytics/shinyJsTutorials
他的代码就是从这里提取此设置的结构的。
强制问题似乎相当常见,修复围绕传递的数据类型和期望进行。但是,从我可以排除的情况来看,代码应该需要一个字符向量,而我正在传递一个字符向量。
想一想我哪里错了?
问题是模块的 UI 部分返回命名空间函数(不可见)。因此,shiny 尝试将函数(类型:闭包)嵌入到您的 UI 代码(类型:字符**)中,这会导致上述错误消息。
as.character 中的错误:无法将类型“closure”强制为“character”类型的向量
如果您将模块 ui 的定义更改为
salesModuleUI <- function(id) {
ns <- NS(id)
return(NULL)
}
Run Code Online (Sandbox Code Playgroud)
错误消失了,因为NULL可以嵌入到闪亮的 UI 定义中。这是一个使用上述 UI 的最小应用程序。
shinyApp(
ui = fluidPage(
salesModuleUI("moduleId")
),
server = function(input, output, session) {}
)
Run Code Online (Sandbox Code Playgroud)
** 实际上,闪亮的 UI 有自己的类shiny.tag,可以是类型list或character取决于用例。然而shiny在将R对象转换为shiny.tag对象时,依赖于as.character泛型。