0Pricing
R Academy · レッスン

代入演算子と特殊演算子

Rの >、%in%とパイプ演算子について学びます。

「代入演算子と特殊演算子」はCoddyKit上の無料R Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

Rにおける代入

Rには、変数に値を代入する方法がいくつかあります。最も慣用的なのは<-で、推奨される書き方です。代入に=を使うコードも見かけますが、状況によっては動作が少し異なります。

# Both assign a value, <- is preferred
name <- 'Alice'
age = 30
cat('Name:', name, '
')
cat('Age:', age, '
')

左矢印 <- と等号 =

<-は常に現在の環境に変数を作成します。=でも代入できますが、関数呼び出しの内部では変数を作成するのではなく、名前付き引数を設定します。この違いは重要です。

# <- creates a variable outside function calls
x <- 42

# = inside function call sets argument, does NOT create x
mean(x = c(1, 2, 3))  # x is an arg here, not a variable

# But <- inside a function call DOES create a variable
mean(y <- c(1, 2, 3))  # y is now also in workspace
cat('y was created:', y, '
')

右代入演算子 ->

Rでは、->を使った右から左への代入もサポートされています。左側の値を右側の名前に代入します。有効な構文ですが、可読性が低下するため、実際にはほとんど使われません。

# Right assignment operator
100 -> max_score
'R Programming' -> course_name
cat('Max score:', max_score, '
')
cat('Course:', course_name, '
')

# Same as:
# max_score <- 100
# course_name <- 'R Programming'

<<-によるグローバル代入

<<-は、ローカルな関数環境ではなく、親(包含)環境にある変数へ値を代入します。関数の外側に存在する変数を関数内から変更するために使用します。

counter <- 0

increment <- function() {
  counter <<- counter + 1  # modifies the global counter
}

increment()
increment()
increment()
cat('Counter after 3 increments:', counter, '
')

%in%メンバーシップ演算子

%in%は、左側の各要素が右側のベクトルに含まれているかどうかを判定します。左オペランドと同じ長さの論理ベクトルを返します。Rで集合への所属を判定する最も簡潔な方法です。

fruits <- c('apple', 'banana', 'cherry', 'date', 'elderberry')

# Check membership
cat('Is mango in fruits?', 'mango' %in% fruits, '
')
cat('Is cherry in fruits?', 'cherry' %in% fruits, '
')

# Check multiple values at once
search <- c('banana', 'mango', 'date')
cat('Which are in fruits:', search %in% fruits, '
')

%in%によるフィルタリング

%in%は、ベクトルやデータフレームの行をフィルタリングするときに特に強力です。あらかじめ定義した許可値の集合に含まれる要素を選択できます。

countries <- c('USA', 'UK', 'Canada', 'Germany', 'France', 'Japan')
populations <- c(331, 67, 38, 83, 67, 126)  # millions

# Keep only G7 European members
g7_europe <- c('UK', 'Germany', 'France', 'Italy')
mask <- countries %in% g7_europe
cat('G7 Europe countries:', countries[mask], '
')
cat('Populations:', populations[mask], '
')

%*%による行列の乗算

%*%は、*が要素ごとに乗算するのとは異なり、実際の行列の乗算(内積)を実行します。A(m x n)行列とB(n x p)行列の場合、結果は(m x p)行列になります。

A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)

cat('Matrix A:
')
print(A)
cat('Matrix B:
')
print(B)
cat('A %*% B (matrix mult):
')
print(A %*% B)
cat('A * B (element-wise):
')
print(A * B)

ネイティブパイプ |>

R 4.1で導入されたネイティブパイプ|>は、左辺の式の結果を右側の関数の第1引数として渡します。処理を連鎖させたコードが、より読みやすくなります。

# Without pipe
result1 <- round(sqrt(abs(-16)), 2)
cat('Without pipe:', result1, '
')

# With native pipe |>
result2 <- -16 |> abs() |> sqrt() |> round(2)
cat('With pipe:', result2, '
')

# Reading left to right: take -16, get abs, sqrt, then round

ベクトルとパイプ

ネイティブパイプ|>は、ベクトルや数値演算と組み合わせると特に便利です。中間変数を作成せずに変換を連鎖させられるため、コードがすっきりして追いやすくなります。

scores <- c(88, 45, 92, 61, 73, 55, 84, 79)

# Chain: keep passing scores, then compute mean
passing_mean <- scores |> \(x) x[x >= 60] |> mean()
cat('Mean of passing scores:', round(passing_mean, 2), '
')

# Another chain: sort, reverse, take top 3
top3 <- scores |> sort(decreasing = TRUE) |> head(3)
cat('Top 3 scores:', top3, '
')

カスタム中置演算子

Rでは、%name%構文を使ってカスタム中置演算子を定義できます。dplyrなどのパッケージが%>%パイプを定義しているのもこの方法です。ドメイン固有の処理用に独自の演算子を作成できます。

# Define a custom infix operator for 'not in'
'%notin%' <- function(x, table) !(x %in% table)

cities <- c('Paris', 'London', 'Berlin', 'Tokyo', 'Sydney')
exclude <- c('Tokyo', 'Sydney')

cat('Cities not in exclude list:', cities[cities %notin% exclude], '
')

演算子クイックリファレンス

このレッスンで扱った特殊な演算子をまとめます:

  • <- — 標準の代入(推奨)
  • = — 代入(関数の引数にも使用)
  • <<- — グローバル環境または親環境への代入
  • %in% — メンバーシップ判定
  • %*% — 行列の乗算
  • |> — ネイティブパイプ(R 4.1以降)
  • %name% — カスタム中置演算子の構文
# Demonstrate %in% as a filter
all_nums <- 1:20
special <- c(3, 6, 9, 12, 15, 18)
cat('Multiples of 3 up to 20:', all_nums[all_nums %in% special], '
')

# Demonstrate pipe
1:10 |> mean() |> cat('
')

理解度チェック

c(2, 4, 6) %in% c(1, 2, 3)として%in%演算子を使用した場合、何が返されますか?

まとめ:特殊な演算子

よくできました!このレッスンの重要なポイントは次のとおりです:

  • 代入には<-を使用します。これがRの慣例です
  • =でも代入できますが、関数呼び出しの内部では曖昧になります
  • <<-を使うと、関数内から親(グローバル)環境の変数を変更できます
  • Rで集合への所属を判定するには%in%が最も簡潔です
  • %*%は行列の乗算を実行します(要素ごとの乗算ではありません)
  • ネイティブパイプ|>(R 4.1以降)は関数呼び出しを左から右へ連鎖させ、コードを読みやすくします
  • カスタム演算子は%name%のパターンに従います
# Pipe + %in% combined
data <- c(5, 12, 3, 8, 15, 7, 20, 1)
valid_range <- 5:15

result <- data |> \(x) x[x %in% valid_range] |> sort()
cat('Values in range 5-15:', result, '
')

よくある質問

「代入演算子と特殊演算子」レッスンは無料ですか?

はい。「代入演算子と特殊演算子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「代入演算子と特殊演算子」で何を学びますか?

Rの >、%in%とパイプ演算子について学びます。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「代入演算子と特殊演算子」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 算術演算子と比較演算子
  2. 論理演算子とブール論理
  3. 代入演算子と特殊演算子
  4. 演算子の優先順位と複雑な式
← R Academyに戻る