You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在函数文档示例中结合\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:25:58