Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“替代品”;!is.null();在R_R - Fatal编程技术网

“替代品”;!is.null();在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))

我的R代码最终包含过多的以下形式的语句:

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)