我正在使用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)中的错误:尝试应用非功能
在这里看不到是什么原因造成的,任何提示将不胜感激!
答案 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"}]
则会得到一个具有一列的数据框。