flexdashboard/Shiny?中的简单刷新按钮?R



我有一个谷歌表单/调查,它将回复保存到谷歌表单中。

谷歌表单中的数据将进入我的flexdashboard/shind应用程序,但如果有人在使用该应用程序时保存了响应,那么查看响应的唯一方法就是在浏览器中实际单击刷新。

我想添加一个按钮,该按钮可以在用户不单击刷新的情况下重新运行应用程序?这可能吗?

这是我写的一些代码——我把一些代码放在一起,但似乎不起作用。

---
title: "Test "
output: 
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(DT)
library(gsheet)
```

Inputs {.sidebar data-width=300}
-----------------------------------------------------------------------
```{r}
jscode <- "shinyjs.refresh = function() { history.go(0); }"

actionButton(jscode, "Refresh")
observeEvent(input$reset, {
})
```
Column
-------------------------------------

### Chart A
```{r}
data <- gsheet2tbl('https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0')
datatable(data
,
editable = TRUE,
options = list(
columnDefs = list(list(className = 'dt-center', targets = "_all")))
)
```

如果不首选重置按钮,我们可以使用invalidateLater(10000)每10秒提取一次数据。

应用程序:

library(shiny)
library(shinyjs)
library(DT)
library(gsheet)
ui <- fluidPage(
useShinyjs(),
actionButton("reset", inputId = "Refresh"),
DTOutput("table")
)
server <- function(input, output, session) {
observeEvent(input$Refresh, {
refresh()
})
data <- reactive({
#invalidateLater(10000)
gsheet2tbl("https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0")
})
output$table <- renderDataTable({
datatable(data(),
editable = TRUE,
options = list(
columnDefs = list(list(className = "dt-center", targets = "_all"))
)
)
})
}
shinyApp(ui, server)

第三种选择是在按下按钮时直接重新渲染数据:

代码:

library(shiny)
library(shinyjs)
library(DT)
library(gsheet)
data <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0")
ui <- fluidPage(
useShinyjs(),
actionButton("reset", inputId = "Refresh"),
DTOutput("table")
)
server <- function(input, output, session) {

observeEvent(input$Refresh, {

df <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1CB2IQHb3g5d8KsEr-_lJNXPKnTBn2nhz_-AzBjRyRK4/edit#gid=0")

output$table <- renderDT({
datatable(df,
editable = TRUE,
options = list(
columnDefs = list(list(className = "dt-center", targets = "_all"))
)
)})

})

#this will render once at the start of the app
output$table <- renderDataTable({

datatable(data,
editable = TRUE,
options = list(
columnDefs = list(list(className = "dt-center", targets = "_all"))
)
)
})
}
shinyApp(ui, server)

最新更新