如何将RMarkdown参数的选项集作为向量在报告内使用?
解决RMarkdown提取TP参数选项集的问题
运行RMarkdown时,params$TP只会返回当前选中的单个时间点值(比如3、10或22),并非包含choices属性的完整参数配置对象,所以你用params$TP$choices肯定取不到选项集。下面是两种可行的解决方法:
方案一:提前定义选项向量(推荐)
先在文档开头的代码块里定义选项向量,然后在YAML中引用它,后续代码直接复用这个向量即可,避免重复配置:
- 在RMarkdown开头添加代码块:
# 定义时间点选项向量 tp_choices <- c(3, 10, 22)
- 修改YAML头部的params配置:
params: TP: label: "Time Point" input: select choices: !r tp_choices # 引用提前定义的向量 Integrated: label: "Integrated" value: TRUE
- 读取数据的代码修改为:
if (params$Integrated == FALSE) { data <- read.csv(paste0("DataATTimePoint", params$TP, ".csv")) } else { # 直接用提前定义的tp_choices向量 data <- lapply(tp_choices, function(x) read.csv(paste0("DataATTimePoint", x, ".csv"))) data <- do.call("rbind", data) }
方案二:解析YAML头部提取选项(适合不修改原有YAML的场景)
如果不想改动原有的YAML配置,可以用yaml包读取当前文档的YAML头部,解析后提取选项集:
# 安装并加载yaml包 if (!require(yaml)) install.packages("yaml") library(yaml) # 读取当前RMarkdown文件的YAML配置 yaml_config <- yaml.load_file(rmarkdown::metadata$path) # 提取TP的选项集 tp_choices <- yaml_config$params$TP$choices # 后续读取数据的逻辑不变 if (params$Integrated == FALSE) { data <- read.csv(paste0("DataATTimePoint", params$TP, ".csv")) } else { data <- lapply(tp_choices, function(x) read.csv(paste0("DataATTimePoint", x, ".csv"))) data <- do.call("rbind", data) }
方案一更简洁高效,不需要额外读取文件,也能避免重复配置选项,推荐优先使用。
内容的提问来源于stack exchange,提问作者FalleS
相关产品推荐
相关产品推荐

