web-dev-qa-db-ja.com

R-IFステートメントでcharacter(0)をテストする方法

これは信じられないほど簡単だと思いますが、答えが見つからないようです。

IFステートメントを記述していますが、テストはオブジェクトがcharacter(0)値を返すかどうかです。ステートメント内のcharacter(0)の処理方法がわかりません。

Test <- character(0)または値を想定:

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

それでも動作しないようです。...

49
Methexis

これを確認するには、identical関数を使用します。

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

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

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"
5
amagard

必須の整頓解答を追加します。 rlangパッケージには関数is_empty()があり、これはまさにあなたが望むことをします。

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

これは、文字ではない空のベクターでも機能します。たとえば、Patrick Roocksがコメントで説明している場合に機能します。

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

「tidyverse」パッケージをロードすると、is_empty()もロードされます。

5
Andrew Brēza

多くの人はstr_locate_all() require %>$ unlist()や_%>%_のような関数を忘れています。[[1]]そうすれば、length() function _if > 0_ oneで簡単にcharacter(0)を検出できますたとえば、_str_locate_all_の出力を安全に使用できます。

例:

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