यहां एक के आधार पर उत्पन्न करने के लिए एक छद्म कोड है चुनाव radioButton और actionButton के साथ किया गया।

ui <- fluidPage(
mainPanel(
tabsetPanel(
  tabPanel("Plots",  
           fluidRow(column(4,wellPanel(
             actionButton("action_plot","Generate Plots"),  
             h6(textOutput("numheat")),
             radioButtons("plot_subset",label="Chose by sample or group?",
                          choices=c("Sample","Group"),selected="Sample"),

             conditionalPanel("input.plot_subset=='Sample'",
                              selectizeInput("view_sample_plot",
                                             label = h5("Select Samples"),
                                             choices = NULL,
                                             multiple = TRUE,
                                             options = list(placeholder = 'select samples to plot')
                              )
             ),
             conditionalPanel("input.plot_subset=='Group'",
                              checkboxGroupInput("view_group_plot",
                                                 label=h5("Select Groups to View"),
                                                 choices="",
                                                 selected="")
             )
           )),
           column(8,
                  tabsetPanel(
                    tabPanel(title="Plot",
                             #textOutput("which_genes"),
                             h4(textOutput("plot_title")),
                             plotOutput("plot_rna",height="800px")
                    )
                  )
           )
           )
  )
)
)
)

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

if(input$plot_subset=='Sample'){
observeEvent(input$action_plot ,{ 
output$plot_rna <- renderPlot({
data_plot1()
function1_plot(data_plot1())
})
})
} else if(input$plot_subset=='group'){
observeEvent(input$action_plot ,{
output$plot_rna <- renderPlot({
data_plot2()
function2_plot(data_plot2())
})
}
}
}

जब radioButton value='sample' और actionButton ट्रिगर होता है, तो मैं विशिष्ट फ़ंक्शन निष्पादित करके एक प्लॉट जेनरेट करने का प्रयास कर रहा हूं। इसी तरह, एक और विशिष्ट कार्य निष्पादित करें जब radioButton value='group' और actionButton चालू हो। जैसा कि ऊपर दिखाया गया है, मैंने if और observeEvent का उपयोग करने का प्रयास किया। हालांकि, यह अपेक्षा के अनुरूप काम नहीं कर रहा है। यह नीचे त्रुटि देता है:

.getReactiveEnvironment()$currentContext में त्रुटि: सक्रिय प्रतिक्रियाशील संदर्भ के बिना ऑपरेशन की अनुमति नहीं है। (आपने कुछ ऐसा करने की कोशिश की जो केवल एक प्रतिक्रियाशील अभिव्यक्ति या पर्यवेक्षक के अंदर से ही किया जा सकता है।)

मैं radiobutton और actionButton मानों के आधार पर प्लॉट कैसे बना सकता हूं? धन्यवाद,

संस्करण 2: सुझाव के अनुसार, मैंने if को observer परिवेश में रखा है जैसा कि नीचे दिखाया गया है:

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

observe({(input$plot_subset=='Sample'})
observeEvent(input$action_plot ,{ 
output$plot_rna <- renderPlot({
data_plot1()
function1_plot(data_plot1())
})
})

observe({input$plot_subset=='Group'})
observeEvent(input$action_plot ,{
output$plot_rna <- renderPlot({
data_plot2()
function2_plot(data_plot2())
})
})
}

यह केवल दूसरे observe से प्लॉट का निर्माण कर रहा है जहां input$plot_subset=='Group' लेकिन पहले से नहीं जब input$plot_subset=='Sample'

संस्करण 3: में भी वही समस्या है जो संस्करण 2 में है।

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

observe({if(input$plot_subset=='Sample'){
observeEvent(input$action_plot ,{ 
output$plot_rna <- renderPlot({
data_plot1()
function1_plot(data_plot1())
})
})
} else if(input$plot_subset=='Group'){
observeEvent(input$action_plot ,{
output$plot_rna <- renderPlot({
data_plot2()
function2_plot(data_plot2())
})
})
}
}
}
1
chas 26 मार्च 2020, 17:13

1 उत्तर

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

चूंकि आपका उदाहरण प्रतिलिपि प्रस्तुत करने योग्य नहीं है, यहां mtcars और iris के साथ एक उदाहरण दिया गया है:

library(shiny)

ui <- fluidPage(
  radioButtons(inputId = "test", "radio buttons", choices = c("iris", "mtcars")),
  actionButton("run", "Run"),
  plotOutput("plot")
  )

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

  observe({
    observeEvent(input$run, {
      if (input$test == "iris") {
        output$plot <- renderPlot({
          plot(iris)
        })
      }

      else if (input$test == "mtcars") {
        output$plot <- renderPlot({
          plot(mtcars)
        })
      }
    })
  })

}

shinyApp(ui, server)
2
bretauv 26 मार्च 2020, 15:43