Kam një vështirësi befasuese për të kthyer një variabël nga një modul në server në një aplikacion R Shiny. Në një modul, do të doja të ktheja një vlerë kur vërehet një shtypje e butonit, kështu që e kam mbështjellë deklaratën return()
në një bllok brenda observeEvent()
. Megjithatë, vlera e dëshiruar nuk është kthyer, i gjithë blloku observeEvent()
duket të jetë.
Jam përpjekur të krijoj një shembull minimal pune që përshkruan problemin më poshtë:
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)
})
}
globale.R
# global.R
source("modules/input.R")
hyrje.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)
})
}
Gjatë testimit të këtij aplikacioni, unë futa "test" në kutinë e futjes së tekstit dhe dorëzova të dhënat e mia. Sidoqoftë, kur u përpoqa të printoja të dhënat e mia, në vend që të printoja "testin" siç prisja, u printua sa vijon:
<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
Unë besoj se kjo korrespondon me bllokun e fundit në input.R
:
observeEvent(input$submit_input, {
print("Return input")
return(input$text_input)
})
Si mund ta bëj këtë aplikacion të funksionojë siç synohet dhe të kthej input$text_input
kur vërehet input$submit_input
?