gpt4 book ai didi

r - 将 Shiny Modules 中的数据从 Module 1 传递到 Module 2

转载 作者:行者123 更新时间:2023-12-04 02:54:49 26 4
gpt4 key购买 nike

我没有可重复的示例,因为问题更多是关于模块如何工作。我试图了解如何将一些 react 功能从一个模块传递到下一个模块。过去我收到过有关使用 ObserveEvent 的回复,但是当我在一个模块中使用响应式值在另一个模块中执行某些其他操作时,它们似乎不起作用

module1 <- function(input, output, session){

data1<-reactive({
#some reacttive funcion that produces an output

})
data2<-reactive({
#some reacttive funcion that produces another output

})



return(list(data1,data2))


}

module2 <- function(input, output, session,data1){

observe( data1(), {

#perform some other functions here using data1().e.g reading or parsing data
})


}

所以基本上我有一个 module1 从 data1 和 data2 返回两个输出

我想在模块 2 中使用 data1 的值并使用该值执行一些新操作。

我在这里查看了类似问题的其他答案,但我仍然不明白。如果有人可以帮助我更清楚地解释这个概念,那将有很大帮助
感谢您的帮助

最佳答案

一种可能性是在构建时将输出从一个模块传递到另一个模块。这允许模块之间的层次关系。还有可能创建在两个模块之间共享的内存,我不会在这个答案中介绍。

react 值

在这里,我创建了一个 inputModuleoutputModule . inputModule接收用户的两个文本输入,输出模块通过 verbatimTextOutput 显示它们. inputModule将用户提交的数据作为 reactiveValues 传递给输出模块名为 ImProxy 的对象(输入模块代理)。 outputModule像列表一样访问数据( ImProxy$text1ImProxy$text2 )。

library(shiny)

inputModuleUI <- function(id){
ns <- NS(id)
wellPanel(h3("Input Module"),
textInput(ns('text1'), "First text"),
textInput(ns('text2'), "Second text"))
}
inputModule <- function(input, output, session){
vals <- reactiveValues()
observe({vals$text1 <- input$text1})
observe({vals$text2 <- input$text2})
return(vals)
}

outputModuleUI <- function(id){
wellPanel(h3("Output Module"),
verbatimTextOutput(NS(id, "txt")))
}
outputModule <- function(input, output, session, ImProxy){
output$txt <- renderPrint({
paste(ImProxy$text1, "&", ImProxy$text2)
})
}

ui <- fluidPage(
inputModuleUI('IM'),
outputModuleUI('OM')
)
server <- function(input, output, session){
MyImProxy <- callModule(inputModule, 'IM')
callModule(outputModule, 'OM', MyImProxy)
}

shinyApp(ui, server)

此方法可用于 observeobserveEvent也是。

列表( react )

如果你想使用 reactive而不是 reactiveValues ,可以使用上述代码的以下改编。您可以离开 ui按原样发挥作用。
inputModule <- function(input, output, session){
list(
text1 = reactive({input$text1}),
text2 = reactive({input$text2})
)
}

outputModule <- function(input, output, session, ImProxy){
output$txt <- renderPrint({
paste(ImProxy$text1(), "&", ImProxy$text2())
})
}

shinyApp(ui, server)

响应式(Reactive)(列表)

同样,这将为应用程序提供相同的功能,但代理模式略有不同。
inputModule <- function(input, output, session){
reactive(
list(
text1 = input$text1,
text2 = input$text2
)
)
}

outputModule <- function(input, output, session, ImProxy){
output$txt <- renderPrint({
paste(ImProxy()$text1, "&", ImProxy()$text2)
})
}

shinyApp(ui, server)

关于r - 将 Shiny Modules 中的数据从 Module 1 传递到 Module 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46555355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com