自定义缺失函数
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
。
你是对的,这更简单。为了清楚起见,我个人可能会保留它。以上是关于自定义缺失函数的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式)