【发布时间】:2022-01-01 11:18:32
【问题描述】:
从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() 中的选项是否有缺点? IE。使用 NULL 作为“没有意识到这个论点”是不好的做法吗?
编辑
问题与geom_smooth() 无关。我在一个我想以这种方式使用 NULL 的包上工作。用一个众所周知的函数来解释我的意思会更容易。
【问题讨论】:
-
您仍然有一个
if和 2 个参数:您的函数首先测试is.null(lev),如果它是TRUE,则将se设置为一个值,如果没有将其设置为另一个值。你测试一个参数的值来决定另一个,没有任何收获。此外,用户有时可能想要 SE 频段,而其他时候则不需要,但总是具有相同的级别。se值将作为变量传递,level保持不变。 -
上述评论是见仁见智,问题也是如此。也许这是一个更适合包维护者的问题。
-
@Rui 这与 geom_smooth 无关。我在一个我想以这种方式使用 NULL 的包上工作。用一个众所周知的函数来解释我的意思会更容易。
-
NULL作为默认参数值有其用途。它避免引用缺失的论点。也可以测试missing(arg)。 -
至于评论的最后一部分,“什么时候有人想将 se 设置为 FALSE 但提供某种级别?”,答案是“从不”。但是,如果您事先不知道是否需要信心带怎么办? 95% 是一个频繁的置信水平,假设你一劳永逸地设置它然后调用函数设置只
se或分配一个变量值FALSE/TRUE然后在函数中使用变量 .