R 将反应式数据集和函数从父应用程序传递到中的模块
我正在努力使用工作流将反应数据集和函数传递给shiny中的模块。我对下面的意思做了一个简单的解释;该应用程序只需打印每个cyl值的平均mpgR 将反应式数据集和函数从父应用程序传递到中的模块,r,function,module,shiny,reactive,R,Function,Module,Shiny,Reactive,我正在努力使用工作流将反应数据集和函数传递给shiny中的模块。我对下面的意思做了一个简单的解释;该应用程序只需打印每个cyl值的平均mpg library(shiny) # Module textToolUI <- function(id){ ns <- NS(id) textOutput(ns("text")) } textTool <- function(input, output, session, value){ output$text <-
library(shiny)
# Module
textToolUI <- function(id){
ns <- NS(id)
textOutput(ns("text"))
}
textTool <- function(input, output, session, value){
output$text <- renderText({paste(value)})
}
# App
ui <- basicPage(
selectInput("carbSelect", "Carburetor Selector", choices = c(1,2,3,4)),
textToolUI("text1")
)
server <- function(input, output, session){
data <- reactive(filter(mtcars, carb == input$carbSelect))
myfunc <- function(x){return(mean(x))}
callModule(textTool, "text1", value = myfunc(data$mpg)) # This throws up the "object of type closure not subsettable" error
# Using data()$mpg means it is not reactive
}
shinyApp(ui = ui, server = server)
库(闪亮)
#模块
textToolUI该模块只需要传递一个反应对象,不需要传递参数
下面的示例将函数移动到模块中,并将其转换为表格而不是文本,因为mean(mtcars)
正在输出NA
library(shiny)
myfunc <- function(x){colMeans(x)}
myfunc2 <- function(x){colSums(x)}
# Module
textToolUI <- function(id){
ns <- NS(id)
tableOutput(ns("text"))
}
textTool <- function(input, output, session, value, f){
output$text <- renderTable({
req(value())
paste(f(value()))
})
}
# App
ui <- basicPage(
selectInput("carbSelect", "Carburetor Selector", choices = c(1,2,3,4)),
p("myfunc1 - colMeans"),
textToolUI("text1"),
p("myfunc2 - colSums"),
textToolUI("text2")
)
server <- function(input, output, session){
data <- reactive(dplyr::filter(mtcars, carb == input$carbSelect))
callModule(textTool, "text1", value = data, f = myfunc)
callModule(textTool, "text2", value = data, f = myfunc2)
# Using data()$mpg means it is not reactive
}
shinyApp(ui = ui, server = server)
库(闪亮)
myfunc值需要是被动的,检查一下我在回答这个问题时遇到的一个非常类似的问题:-在您的情况下,我认为myfunc()
需要在模块中,并且数据作为值传入(没有parans,例如notdata()
)-它需要是被动对象。非常感谢,我想我会把函数本身作为一个参数来传递——干杯!