2

少しひねりを加えてebayley78/shinyMenusの例を再現しようとしています

この例では、ユーザーがプロットを右クリックすると、3 つのラジオ ボタンが表示され、ユーザーが選択したラジオ ボタンに応じて、プロットが Normal、Uniform、または LogNormal に変更されます。

ラジオボタン以外は同じことをしようとしています。右クリックでラジオ ボタンを表示する代わりに、Normal、Lognormal、Uniform (no radio button) などの通常のメニュー オプションをユーザーに表示します。

今、これは私がやったことです。ユーザーが右クリックすると、ラジオボタンは表示されませんが、Quick Dropdown. どうすればQuick Dropdown削除して通常のドロップダウンにし、ユーザーの選択に対応できますか? ポインタや提案は大歓迎です。前もって感謝します。

#devtools::install_github("ebailey78/shinyMenus")

library(shiny)
library(shinyBS)
library(shinyMenus)

app <- shinyApp(
  ui = 
    fluidPage(
      smNavBar("testMenu", "shinyMB", full.width = TRUE, fixed = FALSE, 

               textInput("n", "Sample Size", value = 1000),
               smNavDropdown("Distribution",
                             smRadio("dist", "norm", "Normal", selected = TRUE),
                             smRadio("dist", "lnorm", "Lognormal"),
                             smRadio("dist", "unif", "Uniform")
               ),
               smQuickDropdown("qd2Test", parent = "navbar", "Quick Dropdown", c("Action 1", "Action 2", "Action 3"))
       ),

      smQuickDropdown("qdTest", "Quick Dropdown", c("Action 1", "Action 2", "Action 3")),
      plotOutput("testPlot"),
#       smContextMenu("context1", "testPlot", 
#                     smRadio("dist", "norm", "Normal", selected = TRUE),
#                     smRadio("dist", "lnorm", "Lognormal"),
#                     smRadio("dist", "unif", "Uniform")
#       )

        smContextMenu("context1","testPlot",

                      smQuickDropdown("dist", "Quick Dropdown", c("Normal", "Lognormal", "Uniform"))

                      )

    ),
  server = 
    function(input, output, session) {

      observeEvent(input$qdTest, ({print(input$qdTest)}))
      observeEvent(input[["Action 1"]], ({print(input[["Action 1"]])}))
      output$testPlot <- renderPlot({
        dist <- switch(input$dist,
                       norm = rnorm,
                       lnorm = rlnorm,
                       unif = runif
        )
        plot(dist(input$n))
      })
    }
)

runApp(app)
4

1 に答える 1

1

を使用する必要がありますsmAction。以下の例を参照してください

library(shiny)
library(shinyBS)
library(shinyMenus)

app <- shinyApp(
    ui = 
        fluidPage(
            smNavBar("testMenu", "shinyMB", full.width = TRUE, fixed = FALSE, 

                     textInput("n", "Sample Size", value = 1000),
                     smNavDropdown("Distribution",
                                   smRadio("dist", "norm", "Normal", selected = TRUE),
                                   smRadio("dist", "lnorm", "Lognormal"),
                                   smRadio("dist", "unif", "Uniform")
                     ),
                     smQuickDropdown("qd2Test", parent = "navbar", "Quick Dropdown", c("Action 1", "Action 2", "Action 3"))
            ),

            smQuickDropdown("qdTest", "Quick Dropdown", c("Action 1", "Action 2", "Action 3")),
            plotOutput("testPlot"),
            #       smContextMenu("context1", "testPlot", 
            #                     smRadio("dist", "norm", "Normal", selected = TRUE),
            #                     smRadio("dist", "lnorm", "Lognormal"),
            #                     smRadio("dist", "unif", "Uniform")
            #       )

            smContextMenu("context1","testPlot",

                          smAction("action1", "Normal"),
                          smAction("action2", "Lognormal"),
                          smAction("action3", "Uniform")

            )

        ),
    server = 
        function(input, output, session) {
            output$testPlot <- renderPlot({
                plot(rnorm(input$n))
            })
            observeEvent(input$action1, ({
                output$testPlot <- renderPlot({
                    plot(rnorm(input$n))
                })
            }))
            observeEvent(input$action2, ({
                output$testPlot <- renderPlot({
                    plot(rlnorm(input$n))
                })
            }))
            observeEvent(input$action3, ({
                output$testPlot <- renderPlot({
                    plot(runif(input$n))
                })
            }))

        })
于 2016-05-10T15:47:39.953 に答える