如何在R闪亮中实现重置按钮?

时间:2015-05-18 18:51:08

标签: r shiny

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

  • 加载脚本时,使用NULL对象
  • 呈现数据表
  • 当用户点击" Compute"时,会显示数据表
  • 当用户选择"重置"从列表中删除数据表

不知何故,我无法将自己的思绪包裹起来以实现这一目标。这是一个用来说明我的问题的基本代码:

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(我是吗?)。当我启动闪亮的应用程序时,两个函数都被调用。当我点击&#34;计算&#34;时,没有任何反应。我不知道为什么。

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

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")

    )
})

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您可能偶然发现了一些保留变量?不确定,我看到了一堆有关错误的行为,但是这样做,只是更改了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})
  })
})

答案 1 :(得分:0)

你可以使用带有两个选项的radioButton,&#34;计算&#34;和&#34;重置&#34;。根据输入的值,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)
    }
})