Подтвердить что ты не робот

R - Как проверить символ (0) в инструкции IF

Я предполагаю, что это невероятно просто, но я не могу найти ответ.

Я пишу инструкцию IF, но тест заключается в том, что объект возвращает значение character(0). Я не уверен, как иметь дело с character(0) в инструкции.

Предполагая Test <- character(0) или значение:

if (identical(Pols4,character(0))) {
  print('Empty')
} else {
  print('Not Empty')
}

Он по-прежнему не работает.....

4b9b3361

Ответ 1

Используйте функцию identical, чтобы проверить это.

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

identical(a, "")           # returns FALSE
identical(a, numeric(0))   # returns also FALSE

Ответ 2

Добавление обязательного ответа. В пакете rlang есть функция is_empty(), которая делает именно то, что вы хотите.

Test <- character(0)
rlang::is_empty(Test)
#[1] TRUE

Это также работает для пустых векторов, которые не являются символами. Например, это работает в случае, который Патрик Рукс описывает в комментариях.

Test <- as.Date(character(0))
rlang::is_empty(Test)
#[1] TRUE

Загрузка пакета 'tidyverse' также загружает is_empty().

Ответ 3

Используйте метод 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"

Ответ 4

Многие люди забывают, что такие функции, как str_locate_all() require %>% unlist() или %>%. [[1]] Затем вы можете легко обнаружить символ (0) с помощью функции length() if > 0, например, можно безопасно использовать вывод str_locate_all.

Пример:

value <- str_extract_all("kvk :", ascii_digit(8,8)) %>% unlist()
if(length(value) > 0) {
  #dosomething
}