簡體   English   中英

如何僅使用一次加載文件(使用閃亮的小部件選擇),但是在帶有Shiny運行時的R-Markdown文檔中使用多次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM