如何仅一次加载文件(选择闪亮的小部件)一次,但在带有闪亮的运行时使用R-MARKDOWN文档中多次使用



使用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))
 })

如果将文件加载到数据框中作为单独的反应性表达式,然后将该表达式引用在所有相关的UIS中,我相信这将完成您需要的功能。这是一个小例子:

---
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())
})
```

运行文档时,"立即加载文件..."仅打印一次。我认为这意味着该文件只加载了一次(尽管我很高兴能被用户纠正,以更好地处理反应性的情况)。

相关内容

最新更新