使用ifelse函数返回null

时间:2017-08-22 10:10:56

标签: r

我试图在R中使用ifelse返回null但是它会抛出一条错误消息。有任何建议请。

这是我的代码:

cntr1 <- ifelse(unlist(gregexpr("---",path_info[j], fixed = TRUE, useBytes = TRUE)) > 0, 3 * length(unlist(gregexpr("---",path_info[j], fixed = TRUE, useBytes = TRUE))),NULL )

错误信息是:

Error in ifelse(unlist(gregexpr("---", path_info[j], fixed = TRUE, useBytes = TRUE)) >  : 
  replacement has length zero In addition: Warning message:
In rep(no, length.out = length(ans)) :
  'x' is NULL so the result will be NULL

3 个答案:

答案 0 :(得分:5)

我提出了三种不同的方法来在类似ifelse的场景中返回NULL

在此方案中,当a为NULL

时,b应为NULL
a <- NULL
is.null(a)  #TRUE

b <- switch(is.null(a)+1,"notNullHihi",NULL)
b <- if(is.null(a)) NULL else {"notNullHihi"}
b <- unlist(ifelse(is.null(a),list(NULL),"notNullHihi"))

is.null(b)  #TRUE for each of them

答案 1 :(得分:2)

我最近的一个应用程序中需要类似的功能。这就是我提出解决方案的方式。

obj <- "val1"

# Override a with null (this fails)
newobj <- ifelse(a == "val1", NULL, a)

# Separating the ifelse statement to if and else works

if(obj == "val1") newobj <- NULL else newobj <- obj

答案 2 :(得分:-1)

在您的特定情况下,yes的{​​{1}}和no是单元素向量,您可以尝试将结果作为列表返回

ifelse

如果ifelse(c(TRUE,FALSE,TRUE),list(1),list(NULL)) #[[1]] #[1] 1 # #[[2]] #NULL # #[[3]] #[1] 1 yes中的任何一个都是多元素列表,这种方法也会有效。例如,参见

no