У меня возникают удивительные трудности с возвратом переменной из модуля на сервер в приложении 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)
})
}
При тестировании этого приложения яввел «тест» в поле ввода текста и представил мой ввод.Однако, когда я попытался напечатать свой ввод, вместо того чтобы печатать «тест», как я ожидал, было напечатано следующее:
<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$text_input
, когда наблюдается input$submit_input
?