2015-05-18 4 views
2

В моем блестящем выходе у меня есть DataTable. У меня есть кнопка («Вычислить») и список. Я хочу следующее поведение:Как реализовать кнопку сброса в R блестящей?

  • когда сценарий загружается, таблица данных визуализируется с помощью объекта 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 (am I?). Когда я запускаю блестящее приложение, вызывается обе функции. Когда я затем нажимаю «вычислять», ничего не происходит. Я не знаю, почему.

Вот еще один вопрос о проблеме, отчасти это решение - оно работает, но имеет ненужный выход. Я попытался использовать reactiveValue. Я определяю два дополнительных элемента интерфейса: «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") 

    ) 
}) 

Все лучшее решение?

ответ

2

Возможно, вы наткнулись на некоторые зарезервированные переменные? не уверен, я видел кучу ошибок, но это работает, просто измените имена переменных пользовательского интерфейса тоже

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}) 
    }) 
}) 
+0

если он работает на вас, удалите этот 'dummyoutput', но в какой-то момент он будет работать только с этим, поэтому я не знаю – hedgedandlevered

+0

Спасибо! «Наблюдать» + реактивные ценности - это то, что мне нужно. – January

0

Вы можете использовать radioButton с двумя параметрами, «вычислить» и «перезагрузить». В зависимости от значения этого входа, таблица данных отображается либо не показана.

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

В этом проблема: нет, я не мог. Мне нужна эта кнопка + настройка меню. – January

Смежные вопросы