r-使用NULL作为函数参数的缺点



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函数需要用户指定levgeom_smooth方法允许用户接受selevel参数的默认值,或者只更改其中一个默认值。

selevel自变量的定义也更易于记录。你的lev论点意味着两件事:是否绘制乐队,以及如何绘制;不要策划它"不需要数字参数,但在其他情况下,其中一个参数表示二元选择,其他参数可能适用于这两种情况。CCD_ 23的选择与其他情况一致,因为参数具有明确的含义。

一个参数有时是无关紧要的,这是一个小成本:你不是为每个参数(心理上(付出代价,而是为每个决定付出代价。你仍在做两个决定,所以你的解决方案并不便宜。

在其他情况下,一个参数比两个参数更好。例如,R允许您根据另一个参数的值为一个参数指定默认值。dgamma/rgamma等函数使用它可以指定分发的ratescale,但不能同时指定两者(因为rate*scale = 1(。这被认为是方便的,因为有些人习惯于与一个人合作,而另一个人习惯于与另一个人合作。但我认为这只会让每个人都感到困惑,使文档更加复杂,并让人们想知道为什么rnorm不允许您指定方差而不是s.d。?