求助:如何为参数化R Markdown的sliderInput设置日期型min和max
问题
在参数化R Markdown中设置日期输入的sliderInput时触发错误:Error in min(value) : invalid 'type' (list) of argument。不通过参数运行时,依赖YAML里的value:配置能正常工作,但使用参数运行就报错。
错误栈信息:
Warning: Error in min: invalid 'type' (list) of argument 47: validate_slider_value 46: <Anonymous> 44: param.ui 43: FUN 42: lapply 41: server 4: <Anonymous> 2: rmarkdown::knit_params_ask 1: knit_with_parameters Error in min(value) : invalid 'type' (list) of argument
原R Markdown代码:
--- title: "Salmon Program" date: "`r format(Sys.Date())`" output: pdf_document: toc: yes toc_depth: '4' keep_md: yes params: glimpse: no Runs: label: Salmon Runs value: - W - S - F - L input: select choices: - W - S - F - L multiple: yes Dates: input: slider min: as.Date("2012-01-01") #此处报错 max: as.Date("2012-01-04") value: - !r as.Date("2012-01-01") - !r as.Date("2012-01-04") step: 1 --- # Chinook Runs in the Columbia River ```{r} knitr::opts_chunk$set(out.width = '100%', fig.height = 4, fig.align='center',warning = FALSE, message = FALSE,comment="",echo = FALSE) library('here') library('tidyverse')
Import datasets
## Subset to variables of interest salmon2$SampleDate <- as.Date(salmon2$SampleDate,"%m/%d/%Y") salmon2 <- salmon2 %>% filter(race %in% params$Runs, SampleDate >= params$Dates[[1]] & SampleDate <= params$Dates[[2]])
# 解决方案 问题根源是YAML参数里的`min`和`max`配置未被正确解析:直接写`as.Date()`会被当作普通字符串处理,但`value`用了`!r`前缀让系统识别为R表达式并解析成日期类型,两者类型不匹配触发错误。 修改方式: - 给`min`和`max`也加上`!r`前缀,让R Markdown正确解析这两个日期表达式 - (可选)用`between()`函数简化日期过滤逻辑,代码更简洁 ### 修改后的YAML参数部分 ```yaml params: glimpse: no Runs: label: Salmon Runs value: - W - S - F - L input: select choices: - W - S - F - L multiple: yes Dates: input: slider min: !r as.Date("2012-01-01") max: !r as.Date("2012-01-04") value: - !r as.Date("2012-01-01") - !r as.Date("2012-01-04") step: 1
简化后的过滤代码
salmon2 <- salmon2 %>% filter(race %in% params$Runs, between(SampleDate, params$Dates[[1]], params$Dates[[2]]))
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

