如何在函数文档示例中结合\dontrun和\dontshow使用styler:::style_active_file()无报错
解决styler处理嵌套\dontrun与\dontshow时的报错问题
问题背景
编写R包时,常用#' \dontrun{}标记示例代码避免自动运行,用#' \dontshow{}隐藏辅助操作。单独使用两者时与styler兼容良好,但嵌套使用(\dontrun包裹\dontshow)会触发styler:::style_active_file()或styler::tidyverse_style()报错。
可复现代码
#' @title Test #' @examples #' \dontrun{ #' \dontshow{ #' .old_wd <- setwd("man") #' } #' test() #' \dontshow{ #' setwd(.old_wd) #' } #' } #' @export test <- function() { "test" }
报错情况
执行styler:::style_active_file()后会触发解析错误,回溯信息显示问题出在styler对嵌套roxygen标记的解析环节。
有效解决方法
方法1:用styler忽略标记跳过特定注释块
在嵌套的\dontrun/\dontshow代码块前后添加#' styler: off和#' styler: on,让styler跳过这段内容的格式化,避免解析冲突:
#' @title Test #' @examples #' #' styler: off #' \dontrun{ #' \dontshow{ #' .old_wd <- setwd("man") #' } #' test() #' \dontshow{ #' setwd(.old_wd) #' } #' } #' #' styler: on #' @export test <- function() { "test" }
方法2:升级styler到最新版本
部分旧版本styler存在嵌套roxygen标记的解析bug,尝试升级到最新版:
install.packages("styler")
升级后重新运行格式化操作,可能已修复该兼容性问题。
方法3:调整roxygen标记结构(替代方案)
如果场景允许,用\donttest{}替代外层的\dontrun{}(\donttest用于测试阶段跳过,但示例仍会显示给用户),嵌套\dontshow通常不会触发报错:
#' @title Test #' @examples #' \donttest{ #' \dontshow{ #' .old_wd <- setwd("man") #' } #' test() #' \dontshow{ #' setwd(.old_wd) #' } #' } #' @export test <- function() { "test" }
内容的提问来源于stack exchange,提问作者rempsyc
相关产品推荐
相关产品推荐

