R(演算子と制御構文)

2026年3月 4日 (水)

[R]パイプラインを使ってリストの要素を取り出す

magrittrパッケージのextract関数かextract2関数を使う。それぞれ|>演算子(%>%演算子)を使用したパイプラインにおいて、extract関数は[ ]の、extract2関数は[[ ]]のエイリアスとして機能する。

> chara <- c("アストラ", "ヴィタ", "リフ")
> seiyu <- c("遠藤綾", "日笠陽子", "瀬戸麻沙美")
> sakuhin <- c("ゼンレスゾーンゼロ", "崩壊3rd", "スノウブレイク")
> lis <- list(sakuhin = sakuhin, chara = chara, seiyu = seiyu)
> print(lis)
$sakuhin
[1] "ゼンレスゾーンゼロ" "崩壊3rd" "スノウブレイク"
$chara
[1] "アストラ" "ヴィタ" "リフ"
$seiyu
[1] "遠藤綾" "日笠陽子" "瀬戸麻沙美"
> lis[3]
$seiyu
[1] "遠藤綾" "日笠陽子" "瀬戸麻沙美"
> lis |> extract(3)
$seiyu
[1] "遠藤綾" "日笠陽子" "瀬戸麻沙美"
> lis |> extract(3) |> typeof()
[1] "list"
> lis[[3]]
[1] "遠藤綾" "日笠陽子" "瀬戸麻沙美"
> lis |> extract2(3)
[1] "遠藤綾" "日笠陽子" "瀬戸麻沙美"
> lis |> extract2(3) |> typeof()
[1] "character"

リストに[ ]を使うと、指定した要素だけからなるリストを返す。[[ ]]は指定した要素を取り出して、その要素の自体を返す。

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
無料ブログはココログ

■■

■■■