![](/img/trans.png)
[英]Is it possible to embed a shiny app hosted online into an R-Markdown document?
[英]How to load a file (selected with shiny widget) only once but use multiple times in R-Markdown document with Shiny runtime
使用fileInput小部件,將路徑設置為R-markdown文檔中的文件。 該路徑導致一個大文件。 該文件的內容在文檔的多個部分中都是必需的。 到目前為止,我將文件加載到需要它的每個部分。 由於文件加載需要一些時間,因此更改文件會導致相當長的加載時間。 我希望在路徑更改后僅加載一次文件。
下面的最小示例顯示了我當前的實現方式,在該文件的每個使用部分加載文件。
--- output: html_document runtime: shiny ---
library(kableExtra)
knitr::opts_chunk$set(echo = TRUE)
fileInput("file", label = h3("File input"))
renderUI({
loaded_file <-read.csv(input$file$datapath, sep = ";", header = T)
paste(loaded_file[1,2])
})
renderUI({
loaded_file <-read.csv(input$file$datapath, sep = ";", header = T )
HTML(kable(loaded_file))
})
如果您將文件作為單獨的反應式表達式加載到數據框中,然后在所有相關的UI中引用該表達式,我相信這將滿足您的需求。 這是一個小例子:
---
output: html_document
runtime: shiny
---
```{r load_file}
library(kableExtra)
library(dplyr)
knitr::opts_chunk$set(echo = TRUE)
fileInput("file", label = h3("File input"))
loaded_file_test = reactive({
if(is.element("datapath", names(input$file))) {
print("loading file now...")
read.csv(input$file$datapath, sep = ",", header = T)
}
})
```
```{r first_ui}
renderUI({
HTML(kable(loaded_file_test() %>% head(10)))
})
```
```{r second_ui}
renderUI({
HTML(kable(loaded_file_test() %>% head(10)) %>% kable_styling())
})
```
運行文檔時,“正在加載文件...”僅打印一次。 我將其解釋為意味着該文件僅被加載一次(盡管我很高興能對Shiny中的反應性有更好的了解的用戶進行更正)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.