如何使用 Flexdashboard 和 Shiny "correctly" 将 Web 服务中的数据加载到 Rmarkdown 中的仪表板中?
How to "correctly" load data from a web service into a dashboard in Rmarkdown with Flexdashboard and Shiny?
我有一个关于如何将数据从 Web 服务正确加载到我正在构建仪表板的 rmarkdown 文件中的问题。
基本上,我有一个 rmd 文件,我在其中使用 Flexdashboard 和 Shiny 构建仪表板。我有几个“r 块”,我在其中放置地图(传单)、表格(DT)和各种图(ggplot2 和 plotly)。
目前,我正在通过类似
的网络服务读取数据
www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC
我使用 Shiny 更改参数,它总是 returns 一个 JSON 具有不同的数据。到目前为止,我在每个“r 块”中处理 Web 服务,在显示地图、表格或图表之前将其转换为数据框。
我的问题是,是否可以只处理一次参数的变化,只生成一个数据帧,供Rmd文件中的每个“r chunk”读取?
====
我的 Rmd 文件中的示例:
{r Chunk1-map, echo = FALSE}
renderLeaflet({
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- urltools::param_set(urls = WebService, key = "parameter1", value = input$parameter1)
dataURL <- urltools::param_set(urls = dataURL, key = "parameter2", value = input$parameter2)
resp <- httr::GET(dataURL)
jsonRespText <- content(resp, as = "text")
jsonRespParsed <- content(resp,as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
# Below is the code to make a leaflet map with the Data Frame "df".
})
=====
{r Chunk2-data-table, echo = FALSE}
renderDT({
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- urltools::param_set(urls = WebService, key = "parameter1", value = input$parameter1)
dataURL <- urltools::param_set(urls = dataURL, key = "parameter2", value = input$parameter2)
resp <- httr::GET(dataURL)
jsonRespText <- content(resp, as = "text")
jsonRespParsed <- content(resp,as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
# Below is the code to make a data table with the Data Frame "df".
})
====
{r Chunk3-scatterplot, echo = FALSE}
renderD3scatter({
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- urltools::param_set(urls = WebService, key = "parameter1", value = input$parameter1)
dataURL <- urltools::param_set(urls = dataURL, key = "parameter2", value = input$parameter2)
resp <- httr::GET(dataURL)
jsonRespText <- content(resp, as = "text")
jsonRespParsed <- content(resp,as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
# Below is the code to make a scatter plot with the Data Frame "df".
})
对于使用相同网络服务的每个元素依此类推。
是否需要在每个“r 块”中处理 Web 服务?
我回答我的问题。
只需读取一个 {r chunk}
中的 Web 服务和生成的数据框,我将其设为响应式,如下所示。
尽管出于某种原因用户输入必须在相同的 {r chunk}
(暂时).
{r inputs-data, echo=FALSE}
inputPanel(
selectInput(inputId = "parameter1", label = "Parameter 1",
choices = choices1, selected = "2020"),
selectInput(inputId = "parameter2", label = "Parameter 2",
choices = choices2, selected = "ABC"),
actionButton(inputId = "params", label = "Go",
class = "btn btn-primary btn-block")
)
myData <- reactive({
input$params # ACTION BUTTON
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- isolate(urltools::param_set(urls = WebService,
key = "parameter1",
value = input$parameter1))
dataURL <- isolate(urltools::param_set(urls = dataURL,
key = "parameter2",
value = input$parameter2))
resp <- httr::GET(dataURL)
jsonRespText <- httr::content(resp, as = "text")
jsonRespParsed <- httr::content(resp, as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
在此之后,可以使用 myData()
.
访问所有 {r chunks}
中的反应数据帧
例如:
{r data-table, echo=FALSE}
renderDT({
A <- DT::datatable(data = myData())
A
})
输出如下图所示。
图像顶部显示的传单地图也是使用相同的反应数据框制作的。
你好。
我有一个关于如何将数据从 Web 服务正确加载到我正在构建仪表板的 rmarkdown 文件中的问题。
基本上,我有一个 rmd 文件,我在其中使用 Flexdashboard 和 Shiny 构建仪表板。我有几个“r 块”,我在其中放置地图(传单)、表格(DT)和各种图(ggplot2 和 plotly)。
目前,我正在通过类似
的网络服务读取数据 www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC
我使用 Shiny 更改参数,它总是 returns 一个 JSON 具有不同的数据。到目前为止,我在每个“r 块”中处理 Web 服务,在显示地图、表格或图表之前将其转换为数据框。
我的问题是,是否可以只处理一次参数的变化,只生成一个数据帧,供Rmd文件中的每个“r chunk”读取?
====
我的 Rmd 文件中的示例:
{r Chunk1-map, echo = FALSE}
renderLeaflet({
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- urltools::param_set(urls = WebService, key = "parameter1", value = input$parameter1)
dataURL <- urltools::param_set(urls = dataURL, key = "parameter2", value = input$parameter2)
resp <- httr::GET(dataURL)
jsonRespText <- content(resp, as = "text")
jsonRespParsed <- content(resp,as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
# Below is the code to make a leaflet map with the Data Frame "df".
})
=====
{r Chunk2-data-table, echo = FALSE}
renderDT({
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- urltools::param_set(urls = WebService, key = "parameter1", value = input$parameter1)
dataURL <- urltools::param_set(urls = dataURL, key = "parameter2", value = input$parameter2)
resp <- httr::GET(dataURL)
jsonRespText <- content(resp, as = "text")
jsonRespParsed <- content(resp,as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
# Below is the code to make a data table with the Data Frame "df".
})
====
{r Chunk3-scatterplot, echo = FALSE}
renderD3scatter({
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- urltools::param_set(urls = WebService, key = "parameter1", value = input$parameter1)
dataURL <- urltools::param_set(urls = dataURL, key = "parameter2", value = input$parameter2)
resp <- httr::GET(dataURL)
jsonRespText <- content(resp, as = "text")
jsonRespParsed <- content(resp,as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
# Below is the code to make a scatter plot with the Data Frame "df".
})
对于使用相同网络服务的每个元素依此类推。
是否需要在每个“r 块”中处理 Web 服务?
我回答我的问题。
只需读取一个 {r chunk}
中的 Web 服务和生成的数据框,我将其设为响应式,如下所示。
尽管出于某种原因用户输入必须在相同的 {r chunk}
(暂时).
{r inputs-data, echo=FALSE}
inputPanel(
selectInput(inputId = "parameter1", label = "Parameter 1",
choices = choices1, selected = "2020"),
selectInput(inputId = "parameter2", label = "Parameter 2",
choices = choices2, selected = "ABC"),
actionButton(inputId = "params", label = "Go",
class = "btn btn-primary btn-block")
)
myData <- reactive({
input$params # ACTION BUTTON
WebService <- "www.somewebpage.com/project1/service.py?parameter1=2020¶meter2=ABC"
dataURL <- isolate(urltools::param_set(urls = WebService,
key = "parameter1",
value = input$parameter1))
dataURL <- isolate(urltools::param_set(urls = dataURL,
key = "parameter2",
value = input$parameter2))
resp <- httr::GET(dataURL)
jsonRespText <- httr::content(resp, as = "text")
jsonRespParsed <- httr::content(resp, as="parsed")
df_json <- jsonlite::fromJSON(jsonRespText)
modJson <- jsonRespParsed$Data
df <- modJson %>% bind_rows %>% dplyr::select(var1, var2, var3, var4, var5)
在此之后,可以使用 myData()
.
{r chunks}
中的反应数据帧
例如:
{r data-table, echo=FALSE}
renderDT({
A <- DT::datatable(data = myData())
A
})
输出如下图所示。
图像顶部显示的传单地图也是使用相同的反应数据框制作的。
你好。