自定义缺失函数

Posted

技术标签:

【中文标题】自定义缺失函数【英文标题】:Custom missing function 【发布时间】:2014-04-25 19:34:23 【问题描述】:

missing 为调用者未提供的参数返回TRUE,无论该参数是否具有默认值。

f <- function(a, b=2, c) 
   cat(missing(a), missing(b), missing(c), fill=TRUE)


f(a=1)
# FALSE TRUE TRUE

我想要一个 missing 版本,它仅针对没有默认值的未提供参数返回 TRUE。我想出了一些东西,但它有点难看。

really.missing <- function(x) 
    name.supplied <- as.character(substitute(x))
    do.call(function(y) missing(y), 
            unname(mget(name.supplied, envir=parent.frame())))

ff <- function(a, b=2, c) 
   cat(really.missing(a), really.missing(b), really.missing(c), fill=TRUE)

ff(a=1)
# FALSE FALSE TRUE

有没有更简洁的方法?

【问题讨论】:

if(missing(a))TRUE? 您写道,“我想要一个缺失版本,它仅对没有默认值的未提供参数返回 TRUE。”当a 是函数参数时,if(missing(a)) TRUE 会这样做。 if (missing(a)) TRUE 等价于missing(a),只是在提供a 时返回NULL。我想要一个函数,当提供a 或它具有默认值时返回FALSE,否则返回TRUE 不,这正是我要求的。 【参考方案1】:

如果我正确理解了您的问题,如何:

noval<- function(x) 
  tryCatch( force(x); FALSE, error = function(x) TRUE)


f <- function(a, b=2, c) 
  cat(noval(a), noval(b), noval(c), fill=TRUE)


f(a=1)

noval 函数将强制评估您的参数(如果传入或设置了默认值则成功,否则失败)并相应地返回 FALSE/TRUE。

【讨论】:

谢谢,tryCatch 更简单。事实上,你甚至不需要force 你是对的,这更简单。为了清楚起见,我个人可能会保留它。

以上是关于自定义缺失函数的主要内容,如果未能解决你的问题,请参考以下文章

最强自定义PHP集成环境,系统缺失dll和vc也能正常运行

自定义DataTables如何在Shiny中显示缺失值

如何在 Flutter Web 上启用自定义图标?

自定义异常类型

R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式)

oracle 自定义函数返回一个自定义整数列,如何在下一个自定义函数中,调用上一个函数