【问题标题】:How to implement a reset button in R shiny?如何在 R Shiny 中实现重置按钮?
【发布时间】:2015-07-30 09:44:43
【问题描述】:

在我闪亮的输出中,我有一个 DataTable。我有一个按钮(“计算”)和一个列表。我想要以下行为:

  • 加载脚本时,使用 NULL 对象呈现数据表
  • 当用户点击“计算”时,会显示一个数据表
  • 当用户从列表中选择“重置”时,数据表被擦除

不知何故,我无法用闪亮的方式来实现这一目标。这是说明我的问题的基本代码:

server.R

server.fun <- function(input, output) {

  output$results <- renderDataTable({
    mytab <- data.frame( ID=1:10, blah=letters[1:10] ) 
    input$compute
    print("computing")
    mytab
  })

  output$results <- renderDataTable({
    input$reset
    print("resetting")
    NULL
  })
}

ui.R

shinyUI({
  basicPage(
        actionButton("compute", "Compute"),
        selectInput( "reset", "",
          list("------"="",
            "Do nothing"="nothing",
            "Reset"="reset")
        ),

        dataTableOutput( "results" )
    )
})

很明显,它没有做我想做的事。我不认为我可以将两个反应函数连接到同一个对象output$results(我是吗?)。当我启动闪亮的应用程序时,两个函数都会被调用。然后当我点击“计算”时,什么也没有发生。我不知道为什么。

这是对这个问题的另一种看法,它部分是一种解决方案——它有效,但有不必要的输出。我尝试使用reactiveValue。我定义了两个额外的 UI 元素,“foo”和“bar”。

server.R

server.fun <- function(input, output) {

  rv <- reactiveValues()
  rv$mytab <- NULL

  output$foo <- renderText({
    input$compute
    rv$mytab <- data.frame( ID=1:10, blah=letters[1:10] )
    "computing"
  })    

  output$bar<- renderText({
    input$reset
    rv$mytab <- NULL
    "resetting"
  })

  output$results <- renderDataTable({
    rv$mytab
  })

}

ui.R

shinyUI({
  basicPage(
        actionButton("compute", "Compute"),
        selectInput( "reset", "",
          list("------"="",
            "Do nothing"="nothing",
            "Reset"="reset")
        ),

        dataTableOutput( "results" ),
        textOutput("foo"),
        textOutput("bar")

    )
})

有更好的解决方案吗?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可能偶然发现了一些保留变量?不确定,我看到了一堆错误的行为,但这有效,只需更改 UI 变量名称即可

    shinyServer(function(input, output,session) {
    
      output$dummyoutput <- renderText({NULL})
      output$results1 <- renderDataTable({NULL})
      observe({
        input$compute1
        output$results1 <- renderDataTable({
          mytab <- data.frame( ID=1:10, blah=letters[1:10] ) 
          print("computing")
          return(mytab)
        })
      })
    
      observe({
        input$reset1
        print("resetting")
        output$results1 <- renderDataTable({NULL})
      })
    })
    

    【讨论】:

    • 如果它对你有用,请删除 dummyoutput 但在某一时刻它只会与它一起运行,所以我不知道
    • 谢谢! “观察” + reactiveValues 是我所需要的。
    【解决方案2】:

    您可以使用带有“计算”和“重置”两个选项的单选按钮。根据该输入的值,data.table 会显示或不显示。

    output$results <- renderDataTable({
        if ( input$radio == "compute" ) {
            print('computing')
            return(data.frame( ID=1:10, blah=letters[1:10] ) )
        } else {
            print("resetting")
            return(NULL)
        }
    })
    

    【讨论】:

    • 这就是问题所在:不,我不能。我需要那个按钮+菜单设置。
    猜你喜欢
    • 2018-02-24
    • 2017-03-25
    • 1970-01-01
    • 2020-04-17
    • 2021-11-29
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多