“替代品”;!is.null();在R
我的R代码最终包含过多的以下形式的语句:“替代品”;!is.null();在R,r,R,我的R代码最终包含过多的以下形式的语句: if (!is.null(aVariable)) { do whatever } 但是这种说法很难理解,因为它包含两个否定。我更喜欢这样的: if (is.defined(aVariable)) { do whatever } 是否定义了一个类型函数,该函数的作用与!R中是否存在.null标准 干杯, yannick您最好确定您的函数或代码接受的值类型,然后询问: if (is.integer(aVariable))
if (!is.null(aVariable)) {
do whatever
}
但是这种说法很难理解,因为它包含两个否定。我更喜欢这样的:
if (is.defined(aVariable)) {
do whatever
}
是否定义了一个类型函数,该函数的作用与!R中是否存在.null标准
干杯,
yannick您最好确定您的函数或代码接受的值类型,然后询问:
if (is.integer(aVariable))
{
do whatever
}
这可能是对isnull的改进,因为它提供了类型检查。另一方面,它可能会减少代码的泛型
或者,只需制作您想要的功能:
is.defined = function(x)!is.null(x)
伊恩在评论中提到了这一点,但我认为这是一个很好的答案:
if (exists("aVariable"))
{
do whatever
}
请注意,变量名被引用 如果只是简单易读,您可以定义自己的函数:
is.not.null <- function(x) !is.null(x)
shiny
包提供了方便的函数validate()
和need()
,用于检查变量是否可用和有效<代码>需要()计算表达式。如果表达式无效,则返回错误消息。如果表达式有效,则返回NULL
。可以使用它来检查变量是否有效。有关更多信息,请参见?需要
我建议定义如下函数:
is.valid <- function(x) {
require(shiny)
is.null(need(x, message = FALSE))
}
你可以简单地写下:
if (is.valid(x)) {
...
}
通过检查类try error
,它甚至可以与try()
块一起使用,以静默方式捕获错误:(请参阅)
我还看到:
if(length(obj)) {
# do this if object has length
# NULL has no length
}
但我觉得这并不好。因为有些向量的长度可以是0<代码>字符(0)
,逻辑(0)
,整数(0)
,这可能会被视为空值而不是错误 要处理未定义的变量以及空值,您可以使用substitute
和deparse
:
nullSafe <- function(x) {
if (!exists(deparse(substitute(x))) || is.null(x)) {
return(NA)
} else {
return(x)
}
}
nullSafe(my.nonexistent.var)
nullSafe aVariable从何而来?它是向量中的元素,函数的全局或非向量参数?我可能有更多的建议。也许“存在”与你想要的很接近。请看哈兰下面关于“存在”的评论……我认为这是不一样的<代码>存在
测试变量是否已绑定is.null
假定变量已绑定,并测试其内容是否为对象null。它们是不可互换的。名称是.defined
不太正确,因为可以用值NULL
声明变量。试试看,例如perl中的x,如果一个变量的值为undef(类似于null),那么它至少被认为是未定义的。
bad = try(1 + "1", silent = TRUE)
if (is.valid(bad)) {
...
}
if(length(obj)) {
# do this if object has length
# NULL has no length
}
nullSafe <- function(x) {
if (!exists(deparse(substitute(x))) || is.null(x)) {
return(NA)
} else {
return(x)
}
}
nullSafe(my.nonexistent.var)