我在一个R Shiny应用程序中遇到了从模块返回变量到服务器的问题。在一个模块中,我希望当观察到按钮按下时返回一个值,因此我将
我尝试创建了一个最小化的工作示例来说明问题:
return()
语句包装在observeEvent()
内部的块中。然而,期望的值没有被返回,整个observeEvent()
块似乎被返回了。我尝试创建了一个最小化的工作示例来说明问题:
ui.R
# ui.R
fluidPage(
input_module_ui("input"),
actionButton("print_input_button",
label = "Print Input")
)
server.R
# server.R
function(input, output, session) {
# Calling input module.
input_module_return <- callModule(input_module, "input")
observeEvent(input$print_input_button, {
print(input_module_return)
})
}
global.R
# global.R
source("modules/input.R")
input.R
# input.R
input_module_ui <- function(id) {
ns <- NS(id)
tagList(
textInput(ns("text_input"),
label = h2("Input Text:")),
actionButton(ns("submit_input"),
label = "Submit Input")
)
}
input_module <- function(input, output, session) {
print("I should only print once")
observeEvent(input$submit_input, {
print("Return input")
return(input$text_input)
})
}
在测试这个应用程序时,我在文本输入框中输入了“test”并提交我的输入。然而,当我尝试打印输出时,与我预期的打印“test”不同,下面的内容被打印出来:
<Observer>
Public:
.autoDestroy: TRUE
.autoDestroyHandle: function ()
clone: function (deep = FALSE)
.createContext: function ()
.ctx: environment
destroy: function ()
.destroyed: FALSE
.domain: session_proxy
.execCount: 3
.func: function ()
initialize: function (observerFunc, label, suspended = FALSE, priority = 0,
.invalidateCallbacks: list
.label: observeEvent(input$submit_input)
.onDomainEnded: function ()
onInvalidate: function (callback)
.onResume: function ()
.prevId: 1896
.priority: 0
resume: function ()
run: function ()
self: Observer, R6
setAutoDestroy: function (autoDestroy)
setPriority: function (priority = 0)
suspend: function ()
.suspended: FALSE
我相信这对应于input.R
中的最后一个块:
observeEvent(input$submit_input, {
print("Return input")
return(input$text_input)
})
如何使此应用程序按预期工作,并在观察到input$submit_input
时返回input$text_input
?