【问题标题】:R force argument missingness - R_MissingArgR 强制参数缺失 - R_MissingArg
【发布时间】:2015-04-10 21:42:31
【问题描述】:

有一条关于 R 内部缺少参数的信息:Missingness
如果有办法在该函数中将函数的参数设置(覆盖)为R_MissingArg,我很感兴趣?
种类:

f <- function(x){
    if(!missing(x)) message("x non missing")
    make_missing(x)
    if(missing(x)) message("x missing")
    invisible()
}

我知道这可能不是推荐的方法,我应该使用 x &lt;- NULLis.null(x) 而不是检查缺失。

【问题讨论】:

  • 您能详细说明您为什么要这样做吗?我想这是因为你试图将它传递给另一个你想要的默认函数,所以你希望它丢失(否则,如果你只是在函数体中使用它,你只需这样做:isMissing = missing(x),并始终使用该标志。如果您想在后续调用中使用默认值,那么您可能需要使用 args() 等函数手动设置调用
  • 我没有看到任何上下文可以证明在生产代码中使用 make_missing(x) 而不是 x &lt;- NULL 是合理的。但是我有一些代码要处理,它很长,并且有多个 missing(x) 检查,不将所有这些检查更新为 is.null(x) 只是为了测试一些新东西会很方便。
  • 或许你可以使用x &lt;- substitute(): f = function(x) { x = substitute(); missing(x) }; f(5)
  • @alexis_laz 这么简单!它似乎有效,将其发布为答案,以便我接受。谢谢

标签: r


【解决方案1】:

您可以将“x”替换为substitute()

var = substitute()
var
#Error: argument "var" is missing, with no default

而且,虽然只使用 x = substitute() 更安全,但您的 make_missing 可能看起来像:

make_missing = function(x) assign(deparse(substitute(x)), 
                                  substitute(), 
                                  envir = parent.frame())

还有你的“f”:

f = function(x)
{
    if(missing(x)) message("missing") else message("not missing")

    make_missing(x)
    if(missing(x)) message("missing") else message("not missing")
}
f()
#missing
#missing
f(7)
#not missing
#missing

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 2018-01-11
    • 2020-07-01
    • 2012-06-28
    • 2022-01-05
    • 2021-05-15
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多