R 将反应式数据集和函数从父应用程序传递到中的模块

R 将反应式数据集和函数从父应用程序传递到中的模块,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 <-

我正在努力使用工作流将反应数据集和函数传递给shiny中的模块。我对下面的意思做了一个简单的解释;该应用程序只需打印每个cyl值的平均mpg

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,例如not
data()
)-它需要是被动对象。非常感谢,我想我会把函数本身作为一个参数来传递——干杯!