Ошибка пространства имен в блестящем модуле с условной панелью - PullRequest
0 голосов
/ 18 сентября 2018

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

мое приложение. R

library(shiny)

ui <- fluidPage(  
  fluidRow(
    column(6,
           chartTableSwitchUI("firstUniqueID")
           )
    )
)

server <- function(input, output) {
  callModule(chartTableSwitch, "firstUniqueID")
}

shinyApp(ui = ui, server = server)

, и я написал код globar.R, который выглядит следующим образом:

library(shiny)
library(plotly)

#define a simple dataframe for module example
X <- c("a", "b", "c")
Y <- c(1,2,3)
df <- data.frame(X,Y)

#UI function for first module
chartTableSwitchUI <- function(id){
  ns <- NS(id)
  tagList(
    radioButtons("rb1", "View", choices = c(ns("Chart"), ns("Table")), 
                 selected = "Chart", inline = TRUE),
    conditionalPanel(
      condition = "input.rb1 == 'Chart'", ns=ns, 
    plotlyOutput(ns("chart"))),
        conditionalPanel(
          condition = "input.rb1 == 'Table'", ns=ns, 
    tableOutput(ns("chartTable")))
     )
    }

#Server logic for first module
    chartTableSwitch <- function(input, output, session){
    output$chart <- renderPlotly(
    plot_ly(df, x = ~X, y = ~Y) 
  )

  output$chartTable <- renderTable(df)
}

Если я запускаю приложение, переключатели есть, но нет графика или диаграммы.Просто радио кнопки.

Некоторые исследования здесь, посвященные StackExchange, подсказали мне, что это, вероятно, связано с ошибкой в ​​пространстве имен, но я не знаю, в чем именно заключается проблема.

Где моя ошибка?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Ваше решение правильное, но оно нуждается в небольшом изменении. Вместо использования ns() вокруг выбора radioButton, вы должны использовать его вокруг входного идентификатора radioButton следующим образом:

 radioButtons(ns("rb1"), "View", choices = c("Chart", "Table"), 
             selected = "Chart", inline = TRUE)

и теперь оно должно работать. Смотрите изображение ниже

введите описание изображения здесь

0 голосов
/ 18 сентября 2018

1) ns функция должна вызываться по radioButtons имени (в вашем случае "rb1"), и к этому должна быть адаптирована условная проверка.

2) Нет необходимости звонить ns на выбранные вами имена.

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

#UI function for first module
chartTableSwitchUI <- function(id){
  ns <- NS(id)
  tagList(
    radioButtons(ns("rb1"), "View", choices = c("Chart", "Table"), 
                 selected = "Chart", inline = TRUE),
    conditionalPanel(
      condition = paste0('input[\'', ns('rb1'), "\'] == \'Chart\'"),
      plotlyOutput(ns("chart"))),
    conditionalPanel(
      condition = paste0('input[\'', ns('rb1'), "\'] == \'Table\'"),
      tableOutput(ns("chartTable")))
  )
}

см. Также этот вопрос для объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...