这是我的应用代码:
app.R
library(shiny)
source("func.R")
# create data
name <- c("Moller", "Mayer", "Bernard")
sales <- c(35000, 40000, 60000)
df <- data.frame(name, sales)
# app
server <- function(input, output, session) {
x <- callModule(testPlot, "test", data = reactive(df), xAxis = reactive("name"), yAxis = reactive("sales"))
}
ui <- fluidPage(
testPlotUI(id = "test", stringName = "test")
)
shinyApp(ui = ui, server = server)
这是我的模块代码:
func.R
library(shiny)
library(ggplot2)
testPlotUI <- function(id, stringName){
ns <- NS(id)
fluidRow(
column(12,
plotOutput(stringName)
)
)
}
testPlot <- function(data, xAxis, yAxis){
output$test <- renderPlot({
ggplot(data(), aes_string(x=xAxis(), y=yAxis())) + geom_bar(stat = "identity")
})
}
此代码最终会出现此错误:
模块出错(childScope $ input,childScope $ output,childScope,...) :未使用的参数(childScope $ input,childScope $ output, childScope)
我该如何做到这一点?
答案 0 :(得分:1)
您收到该错误的原因是,模块服务器部分的前三个参数必须为input
,output
和session
。所以你需要改变:
testPlot <- function(data, xAxis, yAxis){
output$test <- renderPlot({
ggplot(data(), aes_string(x=xAxis(), y=yAxis())) + geom_bar(stat = "identity")
})
}
成:
testPlot <- function(input, output, session, data, xAxis, yAxis){
output$test <- renderPlot({
ggplot(data(), aes_string(x=xAxis(), y=yAxis())) + geom_bar(stat = "identity")
})
}
仅凭此更改,您的代码现在可以正常运行而不会出现任何错误。但是,什么都不会出现。那是因为你忘记了使用模块的另一个关键组件,即将所有输入/输出id包装在ns()
函数中。所以改变:
column(12,
plotOutput(stringName)
)
成:
column(12,
plotOutput(ns(stringName))
)
现在你应该看到你的情节没有问题了。