Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在另一个闪亮模块中调用闪亮模块(从一个模块到另一个模块的反应功能)_R_Module_Shiny - Fatal编程技术网

R 如何在另一个闪亮模块中调用闪亮模块(从一个模块到另一个模块的反应功能)

R 如何在另一个闪亮模块中调用闪亮模块(从一个模块到另一个模块的反应功能),r,module,shiny,R,Module,Shiny,我想知道如何将一个模块中的反应功能访问到另一个模块。如果我在一个模块中有多个反应功能,我可以在另一个模块中访问它们吗 因此,基本上我如何调用/传递一个闪亮模块中的反应函数到另一个闪亮模块(从一个模块到另一个模块的反应函数) 谢谢 module1Ui您需要在模块中使用return将响应返回给应用程序或调用嵌套模块的模块。在调用层中,使用您需要在模块中使用return将响应返回到调用嵌套模块的应用程序或模块。在调用层,使用谢谢你的回复,但是我仍然不能在module2中使用dataone()。假设我想

我想知道如何将一个模块中的反应功能访问到另一个模块。如果我在一个模块中有多个反应功能,我可以在另一个模块中访问它们吗

因此,基本上我如何调用/传递一个闪亮模块中的反应函数到另一个闪亮模块(从一个模块到另一个模块的反应函数) 谢谢


module1Ui您需要在模块中使用
return
将响应返回给应用程序或调用嵌套模块的模块。在调用层中,使用
您需要在模块中使用
return
将响应返回到调用嵌套模块的应用程序或模块。在调用层,使用
谢谢你的回复,但是我仍然不能在module2中使用dataone()。假设我想使用dataone()在模块2中执行一些计算。ABCY你需要在被动的环境中使用它。更新了我的代码。感谢您的回复,但我仍然无法在module2中使用dataone()。假设我想使用dataone()在模块2中执行一些计算。ABCY你需要在被动的环境中使用它。更新了我的代码。
module1Ui <- function(id) {
  ns <- NS(id)

  wellPanel(selectInput(
    ns("cars"),
    "cars:",
    list(
      "Select" = "",
      "a" = "mazda",
      "b" = "ford"
    )
  ))
}


module1 <- function(input, output, session) {
  dataone <- reactive({
    if (input$cars == "mazda") {
      mtcars$mpg
    }
    else {
      (mtcars$hp)
    }
  })
}
module2 <- function(input, output, session) {
  dataone()
  # here I want dataone from the above module1
  # I tried to use callmodule(module1,_) but then didnt understand what the id would be in this case?
}

library(shiny)

ui <-
  fluidPage(
    sliderInput("slider", "how much cars?", 1, 10, 1, width = "100%"),
    uiOutput("selectors"),
    verbatimTextOutput("datap")
  )

server <- function(input, output, session) {
  for (i in 1:10)
    callModule(module1, i)
  output$selectors <- renderUI({
    lapply(1:input$slider, module1Ui)
  })

  # below  code just to test if I was able to correctly get dataone()      #from module2
  output$datap <- renderPrint(lapply(1:input$slider, function(i) {
    datas <- callModule(module2, i)
    datas()
  }))
}

shinyApp(ui, server)
module1Ui <- function(id) {
  ns <- NS(id)

  wellPanel(selectInput(ns("cars"), "Select", c("mpg", "hp")))
}


module1 <- function(input, output, session) {
  dataone <- reactive({
    req(!is.null(input$cars))
    return(input$cars)
  })

  # return dataone so that it is visible in the app
  return(dataone)
}
module2 <- function(input, output, session, dataone) {
  # if you want to use dataone() here, you need to do so in a reactive context, e.g. observe, render*, ...
  observeEvent(dataone(), {
    print(dataone())
  })

  # return dataone so that it is visible in the app
  return(dataone)
}

library(shiny)

ui <-
  fluidPage(
    sliderInput("slider", "how much cars?", 1, 10, 1, width = "100%"),
    uiOutput("selectors"),
    verbatimTextOutput("datap")
  )

server <- function(input, output, session) {
  # create a list for all dataone-Vectors
  dataones <- list()
  for (i in 1:10)
    # fill the list with each dataone
    dataones[[i]] <- callModule(module1, i)

  output$selectors <- renderUI({
    lapply(1:input$slider, module1Ui)
  })

  # below  code just to test if I was able to correctly get dataone()
  #from module2
  output$datap <- renderPrint({
    lapply(1:input$slider, function(i) {
      datas <- callModule(module2, i, dataones[[i]])
      return(paste("Input", i, "returned", datas()))
    })
  })
}

shinyApp(ui, server)