तो मेरे पिछले प्रश्न में से एक में मैं बुकमार्क को पुनर्स्थापित करने और मॉडल को चलाने के तरीके पर कोई समस्या थी। यह सिर्फ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है लेकिन एक ऐप के रूप में, मैं इसे मॉड्यूलर करना चाहता हूं क्योंकि ऐप का आकार बढ़ता रहता है। मेरे पास नीचे कोड है। मॉड्यूल 1 में जब उपयोगकर्ता बुकमार्क पर क्लिक करता है तो मैं डेटाटेबल और कॉल मॉड्यूल 2 प्रस्तुत करने के लिए कॉल करना चाहता हूं। अभी तक मेरे पास मॉड्यूल 1 में कोड है जो काम नहीं कर रहा है। मॉड्यूल 2 के लिए कोड सर्वर सेक्शन में है। मैं इस ऐप को मॉड्यूलर कैसे कर सकता हूं।

"एक चमकदार ऐप के लिए केस का उपयोग करें जहां उपयोगकर्ता कुछ मूल्य दर्ज कर सकते हैं और जब रन पर क्लिक किया जाता है तो यह एक मॉडल चलाएगा और तालिका में मान दिखाएगा। अब जब मैं बुकमार्क पर क्लिक करता हूं तो यह इनपुट मानों को कैप्चर करता है। और जब मैं पुनर्स्थापना बुकमार्क पर क्लिक करें यह इनपुट मानों को पॉप्युलेट करता है। मैं जो करना चाहता हूं वह इनपुट मानों को पुनर्स्थापित करने के बाद इसे फिर से मॉडल को चलाना चाहिए और तालिका में मानों को पॉप्युलेट करना चाहिए। संक्षेप में बुकमार्क को मानों को पॉप्युलेट करना चाहिए और क्लिक करना चाहिए मॉडल चलाने के लिए रन बटन।"

library(shiny)
library(RSQLite)
library(data.table)
library(DT)
library(dplyr)

#### Module 1 renders the first table
opFunc <- function(input, output, session, modelRun,modelData,budget){

  output$x1 <- DT::renderDataTable({
    modelRun()

      datatable(
        df %>% mutate(Current  = as.numeric(Current)*(budget())), selection = 'none', editable = TRUE
      )

  })
}
  tableUI <- function(id) {
    ns <- NS(id)
    dataTableOutput(ns("x1"))
  }

#### ideally the second module for bookmarks

opBookmark <- function(){}

ui <- function(request) {
  fluidPage(
    tableUI("opfun"),
    column(12,
      column(3,tags$div(title="forecast", numericInput("budget_input", label = ("Total Forecast"), value = 2))),
      column(2, textInput(inputId = "description", label = "Bookmark description", placeholder = "Data Summary")),
      column(2, bookmarkButton(id="bookmarkBtn"))),
      column(2, actionButton("opt_run", "Run")),
    tags$style(type='text/css', "#bookmarkBtn { width:100%; margin-top: 25px;}")
  )
}

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

  callModule( opFunc,"opfun",modelRun = reactive(input$opt_run),modelData = df,budget = reactive(input$budget_input))

  observeEvent(input$opt_run, {
    cat('HJE')
  })

  observeEvent(input$bookmarkBtn, {
    session$doBookmark()
  })
}
enableBookmarking(store = "url")
shinyApp(ui, server)
0
SNT 23 फरवरी 2019, 00:54

1 उत्तर

सबसे बढ़िया उत्तर

दुर्भाग्य से प्रदान किया गया कोड पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य नहीं था और न ही न्यूनतम, इसलिए मैंने आगे बढ़कर जो मैंने सोचा था उसे अलग करने की कोशिश की और आपके अन्य पोस्ट से df जोड़ा। मैंने मॉड्यूल सर्वर नाम को opFunc से tableMod में भी बदल दिया क्योंकि यह मेरे लिए एक ऐसे मॉड्यूल के साथ काम करने की कोशिश करने के लिए भ्रमित करने वाला था जिसमें अलग-अलग UI और सर्वर नाम थे :)

निम्नलिखित कोड अपेक्षा के अनुरूप काम करता है।

library(shiny)
library(DT)
library(dplyr)

#### Module 1 renders the first table
tableMod <- function(input, output, session, modelRun,modelData,budget){

  output$x1 <- DT::renderDataTable({
    modelRun()
    isolate(
      datatable(
        modelData %>% 
          mutate(Current  = as.numeric(Current)*(budget())),
        selection = 'none', editable = TRUE
      )
    )
  })
}
tableUI <- function(id) {
  ns <- NS(id)
  dataTableOutput(ns("x1"))
}

ui <- function(request) {
  fluidPage(
    tableUI("opfun"),
    numericInput("budget_input", "Total Forecast", value = 2),
    textInput(inputId = "description", "Bookmark description"),
    bookmarkButton(id="bookmarkBtn"),
    actionButton("opt_run", "Run")
  )
}

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

  df <- data.frame(Channel = c("A", "B","C"),
                   Current = c(2000, 3000, 4000),
                   Modified = c(2500, 3500,3000),
                   New_Membership = c(450, 650,700),
                   stringsAsFactors = FALSE)

  callModule( tableMod,"opfun",
              modelRun = reactive(input$opt_run),
              modelData = df,
              budget = reactive(input$budget_input))

  observeEvent(input$opt_run, {
    cat('HJE')
  })

  setBookmarkExclude("bookmarkBtn")
  observeEvent(input$bookmarkBtn, {
    session$doBookmark()
  })
}

shinyApp(ui, server, enableBookmarking = "url")
2
DeanAttali 24 फरवरी 2019, 05:59