闪亮:在模块内引用renderUI的ID时出错

时间:2019-05-13 15:53:19

标签: r module shiny shinydashboard

我正在使用renderUI构建一个Shiny模块,其中我指的是模块服务器功能内部产生的ID:

library(shiny)
library(DT)
library(dplyr)

module_ui <- function(id){
  ns <- shiny::NS(id)
  shiny::tagList(
    fluidPage(uiOutput('test_ui'))

  )
}


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

  ns <- session$ns

  output$test_ui <- renderUI({

    shiny::fluidPage(
      shiny::selectizeInput(
        inputId = ns('plot_vars'),
        label = 'Choose variables to plot',
        choices = colnames(mtcars),
        selected = colnames(select(mtcars, mpg, wt)),
        multiple = TRUE
      ),
      verbatimTextOutput(ns('text')),
      DT::dataTableOutput(ns('d_plot'))
    )

    })

  output$text <- renderText({
    input$plot_vars
  })

  output$d_plot <- DT::renderDataTable({

    input_data <- mtcars[, input$plot_vars]

    DT::datatable(input_data)

  })

}


ui <- module_ui('XXX')
server <- callModule(module, 'XXX')

shinyApp(ui, server)

尽管始终认真地使用ns(),但是在运行服务器模块功能时遇到以下错误:

  

session $ makeScope(id)中的错误:尝试应用非功能

在这里看不到是什么原因造成的,任何提示将不胜感激!

1 个答案:

答案 0 :(得分:1)

首先,您必须在module_ui <- function(id){ ns <- NS(id) tagList( fluidPage(uiOutput(ns('test_ui'))) ) } 中使用ui

server

您必须像这样定义ui <- fluidPage( module_ui('XXX') ) server <- function(input, output, session){ callModule(module, 'XXX') } drop = FALSE

input_data <- mtcars[, input$plot_vars, drop = FALSE]

还有其他事情:选择数据框的某些列时设置drop=FALSE

  import paramiko

  ssh = paramiko.SSHClient()

  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())



  def details():

  Host = input("Enter the Hostname: ")

  Port = input("Enter the Port: ")

  User = input("Enter the Username: ")

  Pass = input("Enter the Password: ")

  ssh.connect(Host, Port, User, Pass, timeout=2)

  print('connected')

  stdin, stdout, stderr = ssh.exec_command("")

  stdin.write('xcommand SystemUnit Boot Action: Restart\n')

  print('success')

  details()

否则,如果仅选择一列,则会得到一个向量,而使用Values: [{"Value":"296e5e0a-ffe1-e944-80f4-005166811dbb","Type":"System.Guid"}] 则会得到一个具有一列的数据框。