如何获取R Markdown参数功能上传文件的原始文件名与路径
解决方案
场景1:用户手动上传文件,保留原始文件名
原生R Markdown的file类型参数仅返回临时文件路径,要获取原始文件名可以自定义shiny上传控件,返回包含原始文件名和临时路径的对象,完整配置如下:
--- title: "参数化报告模板" date: "`r Sys.Date()`" output: html_document params: date_file: label: "选择日期文件" input: shiny::fileInput multiple: FALSE accept: ".tsv" --- ```{r setup, include=FALSE} # 仅在参数编织模式下执行,避免本地直接运行报错 if (!is.null(params$date_file)) { # 提取原始文件名作为输出文件前缀 output_prefix <- tools::file_path_sans_ext(params$date_file$name) knitr::opts_knit$set(output_file = paste0(output_prefix, "_report.html")) } knitr::opts_chunk$set(echo = TRUE) # 读取文件示例 # df <- read.delim(params$date_file$datapath)
R Markdown
原始文件名:r params$date_file$name
临时文件路径:r params$date_file$datapath
- `params$date_file$name` 即为上传文件的原始文件名,可直接用作输出文件前缀 - `params$date_file$datapath` 为临时文件存储路径,可直接读取数据使用 ## 场景2:本地固定目录文件,下拉选择无需手动输入 如果待选文件均存储在指定本地目录,可配置下拉选择框自动加载目录内文件列表,无需用户手动输入路径,完整配置如下:
title: "参数化报告模板"
date: "r Sys.Date()"
output: html_document
params:
date_file:
label: "选择日期文件"
value: 'dates.tsv'
input: select
# 自动拉取指定目录下的tsv文件作为下拉选项,可自行修改目录路径和匹配规则
choices: !r setNames(list.files(path = "~/your_data_dir", pattern = "\.tsv$", full.names = TRUE),
list.files(path = "~/your_data_dir", pattern = "\.tsv$"))
if (!is.null(params$date_file)) { output_prefix <- tools::file_path_sans_ext(basename(params$date_file)) knitr::opts_knit$set(output_file = paste0(output_prefix, "_report.html")) } knitr::opts_chunk$set(echo = TRUE) # 读取文件示例 # df <- read.delim(params$date_file)
R Markdown
原始文件名:r basename(params$date_file)
文件存储路径:r params$date_file
- 下拉菜单显示文件名为可读性更高的短文件名,选中后返回值为文件完整存储路径,可直接读取 - 可通过修改`list.files`的路径和匹配规则,适配不同目录、不同格式的文件筛选需求 内容的提问来源于stack exchange,提问作者drmariod
相关产品推荐
相关产品推荐

