2017-08-05 81 views
0

这是我的Shiny应用程序的相关代码。让我知道是否需要额外的代码。我能够使用相同的方法来渲染一个图,但是当我尝试渲染一个表时,我遇到了一个错误。闪亮的更新表格与动作按钮

UI:

actionButton("do", "Test!"), 

fluidPage(
     tableOutput('table1') 
), 

服务器

globals <- reactiveValues(
    mydf = dat 
    ) 

    count <- eventReactive(input$do, { 
    filter_mk <- input$mk 
    filter_date <- input$date 
    filter_universe <- input$universe 

    dat_f <- globals$mydf %>% filter(date >= filter_date & universe %in% filter_universe & mrkcp_buckets %in% filter_mk) 

    count <- dat_f %>% 
     group_by(date) %>% 
     count() %>% 
     rename(st = n) %>% 
     group_by(strftime(date, "%Y-%m")) %>% 
     filter(date == max(date)) %>% 
     ungroup() %>% 
     select(`strftime(date, \"%Y-%m\")`, st) %>% 
     spread(`strftime(date, \"%Y-%m\")`, st) %>% 
     .[seq(1, length(.), 3)] 

}) 

output$table1 <- renderTable({ 
    count() 
}, caption= "Test", 
caption.placement = getOption("xtable.caption.placement", "top") 
) 

然而,当我按下 “测试” 按钮,我收到以下错误:错误计数:未使用的参数( )。想知道我是否缺少一些简单的东西。

我也不能做observeEvent(input$do, {output$table2 <- renderTable({.})做一些其他的约束,我没有表现为一个简短的尝试。

回答

0

我认为在调用count函数时必须指定包,因为R可能会将它与被动计数对象混淆。

一个完整的工作的例子是这样(我希望它足够接近的到你,但你没有提供一个完整的最小工作示例中,我不得不做出一些猜测):

ui <- fluidPage(
sidebarLayout(
    sidebarPanel(
    actionButton("do", "Test!"), 
    # as a substitute for mk etc 
    numericInput("numbers", "Max Group_n", min = 1, max = 1000, value = 100) 
), 
    tableOutput('table1') 
) 
) 


server <- function(input, output) { 
library(dplyr) 

globals <- reactiveValues(
    mydf = data.frame(x = 1:1000, 
        y = rnorm(1000), 
        group = sample(LETTERS[1:10], 1000, T)) 
) 

count <- eventReactive(input$do, { 
    filter_n <- input$numbers 

    dat_f <- globals$mydf 

    count <- dat_f %>% 
    group_by(group) %>% 
    # make sure that we use dplyr's count and not the reactive count... 
    dplyr::count() %>% 
    filter(n >= filter_n) 

}) 


output$table1 <- renderTable({ 
    count() 
}, caption = "Test", caption.placement = getOption("xtable.caption.placement", "top")) 
} 

shinyApp(ui = ui, server = server) 

这是否为你工作?