在R中替代“!is.null()”
我的R代码最终包含了过多的表单语句:
if (!is.null(aVariable)) { do whatever } 但是这种说法很难理解,因为它包含了两个否定。 我宁愿像这样的东西:
  if (is.defined(aVariable)) { do whatever } 
 在R中是否存在与is.null相反的is.definedtypes的函数? 
欢呼声,扬尼克
你可能会更好地研究你的函数或代码接受什么样的值,并且要求:
 if (is.integer(aVariable)) { do whatever } 
这可能是对isnull的改进,因为它提供了types检查。 另一方面,这可能会降低代码的通用性。
或者,只需制作你想要的function:
 is.defined = function(x)!is.null(x) 
如果只是一个容易阅读的问题,你可以随时定义你自己的function:
 is.not.null <- function(x) ! is.null(x) 
所以你可以在你的程序中使用它。
 is.not.null(3) is.not.null(NULL) 
Ian在评论中提到了这一点,但我认为这是一个很好的答案:
 if (exists("aVariable")) { do whatever } 
请注意variables名称被引用。
  shiny包提供了方便的函数validate()和need()来检查variables是否可用和有效。  need()评估一个expression式。 如果expression式无效,则返回错误消息。 如果expression式有效,则返回NULL 。 可以用这个来检查一个variables是否有效。 请参阅?need更多信息。 
我build议定义一个这样的函数:
 is.valid <- function(x) { require(shiny) is.null(need(x, message = FALSE)) } 
 如果x是FALSE , NULL , NA , NaN ,一个空string"" ,一个空的primefaces向量,一个只包含缺失值的向量,一个只包含FALSE的逻辑向量,或者一个对象,则该函数返回FALSE类try-error 。 在所有其他情况下,它返回TRUE 。 
 这意味着, need() (和is.valid() )涵盖了非常广泛的失败案例。 而不是写作: 
 if (!is.null(x) && !is.na(x) && !is.nan(x)) { ... } 
可以简单写一下:
 if (is.valid(x)) { ... } 
 通过类try-error的检查,它甚至可以和try()块一起使用来静静地捕获错误:(请参阅https://csgillespie.github.io/efficientR/programming.html#communicating-with-the用户; ) 
 bad = try(1 + "1", silent = TRUE) if (is.valid(bad)) { ... }