我试图在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
答案 0 :(得分:5)
我提出了三种不同的方法来在类似ifelse的场景中返回NULL
。
在此方案中,当a为NULL
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