我的目标是从googlesheet中检索数据并将其映射到传单地图上。
一切都工作正常,只有从googlesheet中检索数据的代码放在global.R中才会对运行的闪亮应用程序的那个会话有效。
但是,如果同时工作表是更新后,这些更新不会反映在正在运行的会话中。 所以我需要连接ui.R按钮以在每次触发按钮时获取新数据,并将数据传递到server.R中的相关代码。(我希望这很清楚)。< / p>
在我目前的设置中,数据从googlesheet下载(通过 global.R )并传递到环境并用于正在运行的应用会话。
这是我工作的闪亮应用程序设置:
...
leafletOutput("map"),
actionButton("button", "Get New Data")
...
#added the below lines to update the question:
selectInput("Country",
"Country:",
c("All",
unique(as.character(draw$Country))))
shinyServer(function(input, output, session) {
#...
output$map <- renderLeaflet({
#... some options here
})
draw <- mydata
drawvalue <- reactive({
if (input$year == year1){return(mydata)} else {
filtered <- filter(mydata, Type == input$type1)
return(filtered)
}
})
observe({
#... some other variable definitions
colorBy <- input$color ##added to update the question
sizeBy <- input$size ##added to update the question
draw <- drawvalue()
colorData <- draw[[colorBy]] ##added to update the question
#... code related to the leaflet
})
#...
}
mydata <- gs_read(gs_key("0123456abcdabcd123123123"))
经过一些阅读和探索,我被告知我必须使用反应和observeEvent。但我错误的设置导致错误,说“对象”mydata“未找到”。
我在服务器上试过.R :(我知道下面的代码都有问题)
observeEvent(input$button,{
mydata <- gs_read(gs_key("0123456abcdabcd123123123"))
})
mydata <- eventReactive(input$button,{
mydata()
})
在我的ui.R中,我也提到“画”,这也是错误。我应该怎么改变这个呢?我在问题中更新了ui.R中的行。这一行是ui.R行的一部分,它调用DT包来显示一些表。
顺便说一句,这个应用程序是基于superzip闪亮的应用程序
注意:我会为接受的答案给予100分奖励。
答案 0 :(得分:5)
一般来说,observe
和observeEvent
不会返回任何值,而是用于副作用。因此,以下代码的这部分内容并未返回任何值,即使您使用<<-
覆盖变量mydata
,闪亮也不会知道其值已更改。
observeEvent(input$button,{
mydata <- gs_read(gs_key("0123456abcdabcd123123123"))
})
因此,如果您想知道数据何时更新,您应该在响应环境中阅读它。所以,不是通过global.R读取数据,而是建议在server.R
中进行跟踪:
mydata <- eventReactive(input$button, {
gs_read(gs_key("0123456abcdabcd123123123"))
})
点击按钮后,会读取(新)数据,然后可以使用mydata()
访问这些数据并传递给render*
函数和代码的其他反应部分。例如:
drawvalue <- reactive({
if (input$year == year1){return(mydata() )} else { # added ()
filtered <- filter(mydata(), Type == input$type1) # added () to mydata
return(filtered)
}
})
您必须更改此部分代码
draw <- drawvalue()
到
draw <- reactive({ drawvalue() })
然后使用draw()
<强>更新强>:
如果您想根据selectInput
从UI.R中选择小部件draw
,您可以执行以下操作:
1)将参数session
添加到updateSelectInput
shinyServer(function(input, output, session) {...} # added session
2)将UI.R中的小部件选项设置为&#34;&#34;
selectInput("Country", "Country:", choices = "")
3)使用以下命令更新服务器端的选项:
observe({
req(draw()) # require that draw is available
updateSelectInput(session, "Country", "Country:",
c("All", unique(as.character(draw()$Country)))) # added ()
})