背景
包可以包含很多功能。其中一些需要提供信息丰富的错误消息,并且可能需要函数中的一些注释来解释发生了什么/为什么发生。f1
假设f1.R
文件中的示例。所有文档和评论(错误的原因和条件的原因)都集中在一个地方。
f1 <- function(x){
if(!is.character(x)) stop("Only characters suported")
# user input ...
# .... NaN problem in g()
# ....
# ratio of magnitude negative integer i base ^ i is positive
if(x < .Machine$longdouble.min.exp / .Machine$longdouble.min.exp) stop("oof, an error")
log(x)
}
f1(-1)
# >Error in f1(-1) : oof, an error
例如,我创建一个单独的conds.R
,指定一个函数(和w
警告、s
建议)等。
e <- function(x){
switch(
as.character(x),
"1" = "Only character supported",
# user input ...
# .... NaN problem in g()
# ....
"2" = "oof, and error") |>
stop()
}
然后在f.R
脚本中,我可以定义f2
为
f2 <- function(x){
if(!is.character(x)) e(1)
# ratio of magnitude negative integer i base ^ i is positive
if(x < .Machine$longdouble.min.exp / .Machine$longdouble.min.exp) e(2)
log(x)
}
f2(-1)
#> Error in e(2) : oof, and error
确实会引发错误,并且在它之上有一个很好的回溯并在控制台中使用调试选项重新运行。此外,作为包维护者,我更喜欢这样做,因为它避免考虑编写简洁的 if 语句 + 1 行错误消息或在tryCatch
语句中对齐注释。
问题
是否有理由(不是对语法的看法)避免conds.R
在包中编写 a ?