如何通过knitr::spin()在R脚本中条件显示HTML输出章节?
解决knitr::spin()条件渲染章节的问题
使用knitr::spin()将R脚本转为HTML时,需根据变量值条件显示指定章节。现有脚本运行后仅显示SECTION 0和SECTION 1,还额外输出了if代码块与NULL,无法正确渲染符合x=2、y=5条件的SECTION 3: Scenario 2。需仅借助knitr::spin()实现按变量值条件显示对应章节的效果。
现有问题脚本
#' #/*****************************************************************************/ #' **SECTION 0:** Some stuff here #/*****************************************************************************/ # /* x <- 2 # */ #' #/*****************************************************************************/ #' **SECTION 1:** Other stuff here #/*****************************************************************************/ # /* y <- 5 # */ if(x==2 & y==1){ #' #/*****************************************************************************/ #' **SECTION 3:** Scenario 1 #/*****************************************************************************/ } else if(x==2 & y==5){ #' #/*****************************************************************************/ #' **SECTION 3:** Scenario 2 #/*****************************************************************************/ } # /* knitr::spin("spin_test.R", knit = TRUE) # */
修改后的正确脚本
#' #/*****************************************************************************/ #' **SECTION 0:** Some stuff here #/*****************************************************************************/ #+ echo=FALSE x <- 2 #' #/*****************************************************************************/ #' **SECTION 1:** Other stuff here #/*****************************************************************************/ #+ echo=FALSE y <- 5 #+ echo=FALSE if(x==2 & y==1){ cat(' #/*****************************************************************************/ **SECTION 3:** Scenario 1 #/*****************************************************************************/ ') } else if(x==2 & y==5){ cat(' #/*****************************************************************************/ **SECTION 3:** Scenario 2 #/*****************************************************************************/ ') } #+ echo=FALSE knitr::spin("spin_test.R", knit = TRUE)
修改说明
- 隐藏执行代码:所有变量定义、条件判断、spin调用的代码块都用
#+ echo=FALSE标记,避免代码本身和执行结果(如NULL)出现在HTML输出中 - 动态输出Markdown:在条件分支中使用
cat()输出符合Markdown格式的章节内容,knitr::spin()会将这些输出内容当作Markdown渲染,实现条件显示对应的章节
期望输出
SECTION 0: Some stuff here SECTION 1: Other stuff here SECTION 3: Scenario 2
内容的提问来源于stack exchange,提问作者theneil
相关产品推荐
相关产品推荐

