R(演算子と制御構文)

2025年1月 4日 (土)

[R]パイプを使う

Rのコマンドラインでは、いわゆるパイプはバージョン4.0.5までは標準で搭載されておらず、magrittrパッケージを導入すれば%>%演算子でパイプを実現することができた。この次のバージョン(4.1.0)からはパイプの機能が標準搭載され、|>演算子を使うことでパイプを実現することができる。

> R.Version()$version.string
[1] "R version 4.0.5 (2021-03-31)"
> s <- c("鈴木みのり", "野口瑠璃子", "和多田美咲")
> s |> sort()
エラー: 予想外の '>' です in "s |>"
> library(magrittr)
> s %>% sort()
[1] "野口瑠璃子" "鈴木みのり" "和多田美咲"

バージョン4.1.0では以下のとおり。

> R.Version()$version.string
[1] "R version 4.1.0 (2021-05-18)"
> s <- c("鈴木みのり", "野口瑠璃子", "和多田美咲")
> s |> sort()
[1] "野口瑠璃子" "鈴木みのり" "和多田美咲"

2024年3月24日 (日)

[R]剰余を求める

%%演算子を使う。

> n <- -5:5
> print(n)
[1] -5 -4 -3 -2 -1 0 1 2 3 4 5
> n %% 3
[1] 1 2 0 1 2 0 1 2 0 1 2
> d <- seq(-3, 3, 0.5)
> print(d)
[1] -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0
> d %% 2
[1] 1.0 1.5 0.0 0.5 1.0 1.5 0.0 0.5 1.0 1.5 0.0 0.5 1.0

2023年3月31日 (金)

[R]パイプを使う

dplyrパッケージの%>%演算子を使う。以下はデータAirPassengersの先頭から10個のレコードを表示させるために、%>%演算子によるパイプラインを使用して抽出した例。

> head(AirPassengers)
[1] 112 118 132 129 121 135
> head(AirPassengers, 10)
[1] 112 118 132 129 121 135 148 148 136 119
> AirPassengers %>% head()
AirPassengers %>% head() でエラー:
関数 "%>%" を見つけることができませんでした
> library(dplyr)
> AirPassengers %>% head()
[1] 112 118 132 129 121 135
> AirPassengers %>% head(10)
[1] 112 118 132 129 121 135 148 148 136 119

%>%演算子は、次の受け取った出力を次の関数の第一引数に与える。受ける関数は、第一引数を省略して記述すればよい。

> dtf <- data.frame(no = 1:12, month = month.abb)
> head(dtf)
no month
1 1 Jan
2 2 Feb
3 3 Mar
4 4 Apr
5 5 May
6 6 Jun
> subset(dtf, no == 3 | no == 4)
no month
3 3 Mar
4 4 Apr
> dtf %>% subset(no == 3 | no == 4)
no month
3 3 Mar
4 4 Apr