Проблемы с хранением реактивов в блестящей R-сессии $ userData / scoping проблема? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь присвоить значение внутри . У меня есть два варианта использования, и один, кажется, работает «mod1», а другой «mod2» не работает


library(shiny)

mod1UI = function(id){
    ns = NS(id)
    uiOutput(ns("selector"))
}

mod1 = function(input, output, session){
    ns = session$ns 
    output$selector <- renderUI({selectInput(
        ns("selected_table"),
        label = "View Data",
        choices = list(one = "one", two = "two"),
        selected = "one"
    )
    })

    session$userData$dataChoice = reactive({req(input$selected_table) })
}

mod2UI = function(id){
    ns = NS(id)
    DT::dataTableOutput(ns("mainTable_choice2"))
}

mod2 = function(input, output, session){
    ns = session$ns

    data <- reactive({
        choice = session$userData$dataChoice()
        #print(choice)
        if(choice == "one"){
            dta = iris
        }else if(choice == "two"){
            dta = Orange
        }
    })



    output$mainTable_choice2 = DT::renderDataTable({
        options = list(autoWidth = TRUE, searching = TRUE)
        #browser()
        data_ = data()
        datatable(data_)
    })


    reactive({
        data = data()
        choice = session$userData$dataChoice()
        if(choice == "one"){
            session$userData$Var1 <- reactive({req(data[input$mainTable_choice2_rows_selected,1])})
        }
    })

}
# Define UI for application
ui <- fluidPage(

    # Application title
    titlePanel("Minimum Example"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            mod1UI("mod1")
        ),

        mainPanel(
            mod2UI("mod2")
        )
    )
)

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

    callModule(mod1, "mod1")
    callModule(mod2, "mod2")

    #swap Var1 for dataChoice and it works !!!
    observeEvent(session$userData$Var1(), {showModal(modalDialog(
        title = "Are you sure",
        textInput("text",label = "test" , value = "testHL02"),
        easyClose = TRUE,
        footer = tagList(
            modalButton("Cancel"),
            actionButton("delete", "Delete")
        )))})

}

# Run the application 
shinyApp(ui = ui, server = server)

Я могу получить доступ к session$userData$dataChoice() внутри наблюдателя и реактиву в другом модуле и получить результат .

Я не могу позвонить session$userData$Var1() другому наблюдателю. Вместо этого я получаю следующую ошибку:

Ошибка в наблюдаемомЭкспре: попытка применить нефункциональный

Это иллюстрируется при обмене dataChoice с Var1 в наблюдаемом событии в функции сервера .

Кто-нибудь знает почему?

Спасибо JP

...