将输入存储为数值以在Shiny中生成三个表

时间:2017-08-10 06:40:45

标签: r shiny shiny-server

我想创建一个大表来在Shiny应用程序中的表之后创建一些表。

这是我server.R的一部分:

function(input, output) {
    output$year <- renderText(input$year)

    ################################
    # CONFLICTING PART OF THE CODE
    year <- reactive({
      as.character(input$year)
    })

    matrix = tbl_df(dbReadTable(rca_matrices_db, reactive(paste0("table_",year))))
    ################################

    my_table = matrix %>% ... BLA BLA BLA

    output$more_than_10 <- DT::renderDataTable(DT::datatable({
      mytable %>% select(X1,X2) %>% filter(X1 > 10)
    }))

    output$less_than_10 <- DT::renderDataTable(DT::datatable({
      mytable %>% select(X1,X2) %>% filter(X1 < 10)
    }))    
  }
)

year来自ui.R

的这一部分
sidebarPanel(
    selectInput('year', 'Year', c("Select year",1999:2015), selected = 1999)
  )

如果我在server.R的冲突部分替换<{p}}的year变量

year <- 2000

然后它起作用

任何想法?

1 个答案:

答案 0 :(得分:1)

问题在于

    matrix = tbl_df(dbReadTable(rca_matrices_db, reactive(paste0("table_",year))))

不是被动的。每当被动年份发生变化时,它都不会更新。另外,正如评论中已经指出的那样,要调用被动year的值,您需要使用year()。所以你需要让my_table成为一个反应,也许如下:

my_table <- reactive({ 
    my_matrix = tbl_df(dbReadTable(rca_matrices_db, reactive(paste0("table_",year()))))
    my_table = my_matrix %>% ... BLA BLA BLA
    return (my_table)
})

现在,my_table()的值将随时更新year()更改,这些更改会随时更改input$year更改。 (注意,你也可以在这里直接输入$ year而不是让year()成为一个单独的被动者)。

所以你现在可以做到:

output$more_than_10 <- DT::renderDataTable(DT::datatable({
  mytable() %>% select(X1,X2) %>% filter(X1 > 10)
}))

这将随时更新被动mytable()更改,我们刚刚注意到这些更改为`input $ year&#39;变化。希望这有帮助!