【问题标题】:R Shiny Modules - Can't coerce type 'closure' to vector of type characterR Shiny Modules - 不能将类型“闭包”强制为类型字符的向量
【发布时间】:2019-05-23 04:11:57
【问题描述】:

Shiny 模块环境的新手,我正在尝试设置一个基本脚手架,用于将 UI 的选项卡式组件和其他组件从 ui.r 和 server.r 中分离出来

目前我有以下4个文件:

ui.r

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")))

server.r

shinyServer(function(input, output, session){


### Modules
callModule(module = salesModule, id = "SalesModule")


})

global.r

#######
# Libraries
#######

library(shiny)
library(shinydashboard)
library(dplyr)
library(highcharter)
library(DT)


#######
# Source Files
#######

source("modules/salesModule.r")

salesModule.r

salesModuleUI <- function(id){

ns <- NS(id)

}


######
# salesDashboard Server
######

salesModule <- function(input,output,session){

ns <- session$ns

}

如果我从 ui.r 中删除“value = salesModule”和 salesModuleUI 调用,则应用程序加载正常。一旦我将它们添加到使用 salesModuleUI 填充选项卡面板(现在两个 UI 都应该为空),我就会收到错误消息:

警告:as.character 中的错误:无法将“闭包”类型强制转换为“字符”类型的向量

我尝试查看:r shiny error Error in as.vector(x, "character") : cannot coerce type 'closure' to vector of type 'character'

但这个问题似乎与代码中的反应性调用有关,我还没有为此添加反应性。我还评论了:https://github.com/FrissAnalytics/shinyJsTutorials

还有他的代码,这就是这个设置结构的来源。

强制问题似乎相当普遍,并且修复围绕正在传递的数据类型和期望进行。但是,从我可以进行故障排除来看,代码应该期待一个字符向量,而我正在传递一个字符向量。

想到我哪里出错了?

【问题讨论】:

    标签: r shiny shinydashboard


    【解决方案1】:

    问题在于模块的 UI 部分返回命名空间函数(不可见)。因此,shiny 尝试将函数(类型:闭包)嵌入到您的 UI 代码(类型:字符**)中,这会导致上述错误消息。

    as.character 中的错误:无法将“闭包”类型强制转换为“字符”类型的向量

    如果您将模块 ui 的定义更改为

    salesModuleUI <- function(id) {
      ns <- NS(id)
      return(NULL)
    }
    

    错误消失了,因为 NULL 可以嵌入到闪亮的 UI 定义中。这是一个使用上述 UI 的最小应用程序。

    shinyApp(
      ui = fluidPage(
        salesModuleUI("moduleId")
      ),
      server = function(input, output, session) {}
    )
    

    ** 实际上,闪亮的 UI 有自己的名为 shiny.tag 的类,它可以是 listcharacter 类型,具体取决于用例。但是,当闪亮将 R 对象转换为 shiny.tag 对象时,它依赖于 as.character 泛型。

    【讨论】:

    • 欣赏对 UI 组件的洞察。使用 return(NULL) 运行代码,但不幸的是它仍然抛出相同的错误。在这种情况下,这似乎不是问题,或者至少不完全是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多