R Shiny Modules - не может принудить тип 'замыкание' к вектору типа символа - PullRequest
0 голосов
/ 23 декабря 2018

Впервые в среде модулей Shiny, и я пытаюсь настроить базовый каркас для отделения компонентов пользовательского интерфейса и других компонентов с вкладками от 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

}

, если я удалю вызов «value = salesModule» и salesModuleUI изui.r, приложение загружается нормально.Как только я добавляю их, чтобы заполнить панель вкладок с помощью salesModuleUI (либо пользовательский интерфейс должен быть пустым прямо сейчас), я получаю сообщение об ошибке:

Предупреждение: ошибка в as.character: не удается ввести тип 'замыкание «к вектору типа« символ »

Я попытался просмотреть: r блестящая ошибка Ошибка в as.vector (x,« символ »): невозможно принудительно привести тип« замыкание »к векторутипа 'символ'

, но эта проблема, кажется, связана с реактивным вызовом в коде, и я еще не добавил реактивность к этому.Я также рассмотрел: https://github.com/FrissAnalytics/shinyJsTutorials

И его код, вот откуда взята структура для этой настройки.

Проблема принуждения, кажется, довольно распространена, и исправления вращаются вокруг данныхТип прохождения и ожидание.Однако, из-за того, что я могу устранить неполадки, код должен ожидать символьный вектор, а я передаю символьный вектор.

Мысли о том, где я иду не так?

1 Ответ

0 голосов
/ 24 декабря 2018

Проблема в том, что часть пользовательского интерфейса вашего модуля возвращает функцию пространства имен (невидимо).Поэтому блестящий пытается встроить функцию (тип: закрытие) в ваш код пользовательского интерфейса (тип: символ **), который вызывает упомянутое сообщение об ошибке.

Ошибка в as.character: не может привести тип 'замыкание 'на вектор типа' символ '

Если вы измените определение пользовательского интерфейса модуля на

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

, ошибка исчезнет, ​​поскольку NULL может быть встроен в блестящийОпределения пользовательского интерфейса.Вот минимальное приложение, которое использует вышеупомянутый пользовательский интерфейс.

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

** На самом деле, блестящие пользовательские интерфейсы имеют свой собственный класс, называемый shiny.tag, который может иметь тип list или character в зависимости от варианта использования.,Однако, когда «блестящий» преобразует R-объекты в shiny.tag -объекты, он использует универсальный as.character.

...