R - 如何在IF语句中测试字符(0)

Met*_*xis 54 if-statement r

我想这非常简单,但我似乎无法找到答案.

我正在写一个IF语句,但测试是对象是否返回一个character(0)值.我不知道如何character(0)在声明中处理.

假设Test <- character(0)或值:

if (identical(Pols4,character(0))) {
  print('Empty')
} else {
  print('Not Empty')
}
Run Code Online (Sandbox Code Playgroud)

它似乎仍然没有工作.....

Pat*_*cks 75

使用该identical功能来检查这一点.

a <- character(0)
identical(a, character(0))  # returns TRUE

identical(a, "")           # returns FALSE
identical(a, numeric(0))   # returns also FALSE
Run Code Online (Sandbox Code Playgroud)


And*_*ēza 8

添加强制性tidyverse答案。该rlang软件包具有功能is_empty(),它可以完全满足您的需求。

Test <- character(0)
rlang::is_empty(Test)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

这也适用于非字符的空向量。例如,它在Patrick Roocks在评论中描述的情况下有效。

Test <- as.Date(character(0))
rlang::is_empty(Test)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

加载“ tidyverse”包也将加载is_empty()

  • `is_empty()` 也在 `purrr` 中 (3认同)

小智 8

许多人忘记了像str_locate_all()require%>% unlist()%>% .[[1]].

然后,您可以轻松地使用可以安全使用输出character(0)length()功能来检测例如。if > 0str_locate_all()

例子:

value <- str_extract_all("kvk :", ascii_digit(8,8)) %>% unlist()
if (length(value) > 0) {
  # Do something
}
Run Code Online (Sandbox Code Playgroud)


ama*_*ard 5

使用length()方法:

> check <- function(value) {
+ if (length(value)==0) {
+ print('Empty')
+ } else {
+ print('Not Empty')
+ }
+ }
> check("Hello World")
[1] "Not Empty"
> check("")
[1] "Not Empty"
> check(character(0))
[1] "Empty"
Run Code Online (Sandbox Code Playgroud)