从ggplot2
考虑geom_smooth()
,在这里我们可以设置是否要查看置信区间(se
参数(以及区间的宽度(level
参数(。例如:
df <- data.frame(x= rnorm(100), y= rnorm(100))
library(ggplot2)
ggplot(df, aes(x ,y)) + geom_smooth(se= TRUE, level= .95)
我认为不需要两个单独的论点:如果我们设置一些level
,我们显然希望看到置信区间。因此,在这种情况下,se
参数是多余的。另一方面,如果我们选择se= FASLE
,则level
参数是多余的。因此,对我来说,在一个论点中总结这两个信息是直观的。所以我对函数的定义是这样的:
my_smooth <- function(lev, ...){
if(is.null(lev)){
geom_smooth(se= FALSE)
} else{
geom_smooth(se= TRUE, level= lev)
}
}
因此,在my_smooth()
中有一个参数,我们可以通过选择NULL来决定不查看置信区间,也可以输入我们想要查看的级别。当然,如果需要,我们可以添加lev= .95
作为默认值。
在我看来,这种方法非常简单,避免了像geom_smooth(se= FALSE, level= .95)
这样的悖论情况。在函数自变量中使用NULL
作为my_smooth()
中的选项是否存在缺点?也就是说,使用NULL作为"空"是不是一种糟糕的做法;没有意识到这个论点";?
编辑
问题与geom_smooth()
无关。我在一个包上工作,我想用这种方式使用NULL。用一个众所周知的函数来解释我的意思更容易。
您的my_smooth
函数需要用户指定lev
。geom_smooth
方法允许用户接受se
和level
参数的默认值,或者只更改其中一个默认值。
se
和level
自变量的定义也更易于记录。你的lev
论点意味着两件事:是否绘制乐队,以及如何绘制;不要策划它"不需要数字参数,但在其他情况下,其中一个参数表示二元选择,其他参数可能适用于这两种情况。CCD_ 23的选择与其他情况一致,因为参数具有明确的含义。
一个参数有时是无关紧要的,这是一个小成本:你不是为每个参数(心理上(付出代价,而是为每个决定付出代价。你仍在做两个决定,所以你的解决方案并不便宜。
在其他情况下,一个参数比两个参数更好。例如,R允许您根据另一个参数的值为一个参数指定默认值。dgamma/rgamma
等函数使用它可以指定分发的rate
或scale
,但不能同时指定两者(因为rate*scale = 1
(。这被认为是方便的,因为有些人习惯于与一个人合作,而另一个人习惯于与另一个人合作。但我认为这只会让每个人都感到困惑,使文档更加复杂,并让人们想知道为什么rnorm
不允许您指定方差而不是s.d。?