gpt4 book ai didi

r - Flexdashboard 不适用于 Shiny URL 状态

转载 作者:行者123 更新时间:2023-12-01 16:13:57 26 4
gpt4 key购买 nike

我正在尝试将 flexdashboard 与 Shiny 状态书签结合起来。单独使用时(文档中的示例)Shiny 应用程序工作正常,但是当放入 flexdasboard 中时,url 不会更新:

---
title: "Untitled"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
```

Column {data-width=650}
-----------------------------------------------------------------------

### Chart A

```{r}

shinyApp(
ui=function(req) {
fluidPage(
textInput("txt", "Text"),
checkboxInput("chk", "Checkbox")
)
},
server=function(input, output, session) {
observe({
# Trigger this observer every time an input changes
reactiveValuesToList(input)
session$doBookmark()
})
onBookmarked(function(url) {
updateQueryString(url)
})
},
enableBookmarking = "url"
)

```

这可能吗?与独立执行相比:

shinyApp(
ui=function(req) {
fluidPage(
textInput("txt", "Text"),
checkboxInput("chk", "Checkbox")
)
},
server=function(input, output, session) {
observe({
# Trigger this observer every time an input changes
reactiveValuesToList(input)
session$doBookmark()
})
onBookmarked(function(url) {
updateQueryString(url)
})
},
enableBookmarking = "url"
)

看起来onBookmarked(以及onBookmarkonRestoreonRestored等类似事件)永远不会被触发。

最佳答案

嵌入 R Markdown 文档中的 Shiny 应用程序不支持添加书签。

请参阅此处的讨论:https://github.com/rstudio/shiny/pull/1209#issuecomment-227207713

听起来技术上可行,但做起来很棘手。例如,如果文档中嵌入了多个应用程序,会发生什么情况?此外,应用程序作为 iframe 嵌入,因此必须进行一些连接才能允许这些应用程序访问/修改其父窗口的 URL。

<小时/>

但是,书签确实适用于嵌入式 Shiny 组件(而不是完整的应用程序)。

---
title: "Untitled"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
enableBookmarking("url")
```

```{r, include=FALSE}
observe({
reactiveValuesToList(input)
session$doBookmark()
})

onBookmarked(function(url) {
updateQueryString(url)
})

output$content <- renderUI({
tagList(
textInput("txt", "Text"),
checkboxInput("chk", "Checkbox")
)
})
```

Column {data-width=650}
-----------------------------------------------------------------------

### Chart A

```{r}
fluidPage(
uiOutput("content"),
selectInput("sel", label = "Select", choices = c(10, 20, 30), selected = 10)
)
```
<小时/>

您还可以使用Prerendered Shiny Documents ,尽管书签的工作方式不会 100% 相同,因为 UI 是预先渲染的。任何静态 UI 都必须使用 bookmarking callbacks 手动恢复。 ,但动态 UI 会很好地恢复。

---
title: "Untitled"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny_prerendered
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
enableBookmarking("url")
```

```{r, context="server"}
observe({
reactiveValuesToList(input)
session$doBookmark()
})

onBookmarked(function(url) {
updateQueryString(url)
})

# Static inputs are pre-rendered, and must be manually restored
onRestored(function(state) {
updateSelectInput(session, "sel", selected = state$input$sel)
})

# Dynamic inputs will be restored with no extra effort
output$content <- renderUI({
tagList(
textInput("txt", "Text"),
checkboxInput("chk", "Checkbox")
)
})
```

Column {data-width=650}
-----------------------------------------------------------------------

### Chart A

```{r}
fluidPage(
uiOutput("content"),
selectInput("sel", label = "Select", choices = c(10, 20, 30), selected = 10)
)
```

关于r - Flexdashboard 不适用于 Shiny URL 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com