4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rの&と&&の違い

Last updated at Posted at 2022-07-07

本文

短絡評価するかどうかです。
&だと左と右がどちらも評価されますが、&&だと左がFALSEなら右は評価されずにFALSEを返します。
基本的に、&&の場合は単一要素ベクトルしか想定されていないと考えると良さそうです。
&はベクトル演算で&&は制御構造と考えても良いかもしれません。

c(TRUE, FALSE, TRUE) & c(TRUE, FALSE, FALSE)
# [1]  TRUE FALSE FALSE

# [非推奨] &&だと最初の要素のみで評価される挙動になるが、複数要素のベクトルには使わない方が自然。
c(TRUE, FALSE, TRUE) && c(TRUE, FALSE, FALSE)
# [1] TRUE
x <- c("A", "B", "C")
is.numeric(x) && sd(x) > 0 
# [1]  FALSE
## sd(x) > 0は単独だとNAを返すが、左がFALSEなので短絡されて評価されていない

is.numeric(x) & sd(x) > 0
# [1] FALSE
# Warning message:
# In var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) :
#   NAs introduced by coercion
## &でもFALSEが返るが右も評価されてWarninngが出ている。
## 数値型ならsdを計算するという制御を考えるなら&&を使った方が良い

おまけ

短絡評価を使った遊びです。
どういう処理になっているか考えてみてください。

# R version > 4.2
hoge <- \(x) x |> is.null() && return() || return(round(x))
hoge(3.2)
# [1] 3
hoge(NULL)
# NULL

## \(x)はfunction(x)のこと
## |>はパイプライン演算子
## &&は、左がFALSEの場合は右は評価されないが、左がTRUEの場合は左も評価する。
## ||は、左がFALSEの場合は右は評価されるが、左がTRUEの場合は右は評価しない。
4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?