R(リスト)

2024年4月20日 (土)

[R]リストに名前を付けた要素を追加する

list関数で=演算子を使い、名前を指定すればよい。

> s1 <- c("セナディア", "イレイナ")
> s2 <- c("鈴木みのり", "本渡楓")
> s3 <- c("崩壊3rd", "魔女の旅々")
> lst <- list(chara = s1, `声優` = s2, s3)
> print(lst)
$chara
[1] "セナディア" "イレイナ"
$声優
[1] "鈴木みのり" "本渡楓"
[[3]]
[1] "崩壊3rd" "魔女の旅々"

2024年2月20日 (火)

[R]リストの各要素からインデックスを指定してまとめて値を抜き出す

sapply関数に「[[」を指定して使う。以下は、要素がすべてベクトルのリストについて、各要素の1~3番目の要素を抜き出した例。3番目の要素は要素が二つしかないため、3番目の要素を抜き出そうとするとエラーが発生する。lapply関数を使えば、戻り値はリストになる。参考に、最初にリストの各要素の要素数を得ている。

> chara <- c("ライスシャワー", "メイショウドトウ", "フィー", "黒川あかね")
> sakuhin <- c("ウマ娘", "ライザのアトリエ2", "推しの子")
> seiyu <- c("石見舞菜香", "和多田美咲")
> lis <- list(chara, sakuhin, seiyu)
> print(lis)
[[1]]
[1] "ライスシャワー" "メイショウドトウ" "フィー" "黒川あかね"
[[2]]
[1] "ウマ娘" "ライザのアトリエ2" "推しの子"
[[3]]
[1] "石見舞菜香" "和多田美咲"
> sapply(lis, length)
[1] 4 3 2
> sapply(lis, "[[", 1)
[1] "ライスシャワー" "ウマ娘" "石見舞菜香"
> sapply(lis, "[[", 2)
[1] "メイショウドトウ" "ライザのアトリエ2" "和多田美咲"
> sapply(lis, "[[", 3)
FUN(X[[i]], ...) でエラー: 添え字が許される範囲外です
> lapply(lis, "[[", 1)
[[1]]
[1] "ライスシャワー"
[[2]]
[1] "ウマ娘"
[[3]]
[1] "石見舞菜香"
> lapply(lis, "[[", 2)
[[1]]
[1] "メイショウドトウ"
[[2]]
[1] "ライザのアトリエ2"
[[3]]
[1] "和多田美咲"
> lapply(lis, "[[", 3)
FUN(X[[i]], ...) でエラー: 添え字が許される範囲外です

2024年2月19日 (月)

[R]リストの要素を削除する

削除したい要素にNULLを代入する。以下の例のとおり、ベクトルと異なりリストの要素にNULLを代入すると、その要素は消去され順番が詰まり、リストの要素数が一つ減る。

> chara <- c("ライスシャワー", "メイショウドトウ", "フィー", "黒川あかね")
> sakuhin <- c("ウマ娘", "ライザのアトリエ2", "推しの子")
> seiyu <- c("石見舞菜香", "和多田美咲")
> lis <- list(chara, sakuhin, seiyu)
> print(lis)
[[1]]
[1] "ライスシャワー" "メイショウドトウ" "フィー"
[4] "黒川あかね"
[[2]]
[1] "ウマ娘" "ライザのアトリエ2" "推しの子"
[[3]]
[1] "石見舞菜香" "和多田美咲"
> lis[2] <- NULL
> print(lis)
[[1]]
[1] "ライスシャワー" "メイショウドトウ" "フィー"
[4] "黒川あかね"
[[2]]
[1] "石見舞菜香" "和多田美咲"

2024年2月17日 (土)

[R]リストから要素を取り出す

[ ]演算子と[[ ]]演算子を使いそれぞれインデックスを与えると要素を取り出すことができる。戻り値は[ ]演算子はリスト、[[ ]]演算子はベクトルになる。

> chara <- c("ライスシャワー", "メイショウドトウ", "フィー", "黒川あかね")
> sakuhin <- c("ウマ娘", "ライザのアトリエ2", "推しの子")
> seiyu <- c("石見舞菜香", "和多田美咲")
> lis <- list(chara, sakuhin, seiyu)
> print(lis)
[[1]]
[1] "ライスシャワー" "メイショウドトウ" "フィー"
[4] "黒川あかね"
[[2]]
[1] "ウマ娘" "ライザのアトリエ2" "推しの子"
[[3]]
[1] "石見舞菜香" "和多田美咲"

[ ]演算子は指定の要素を単純にリストで返す。複数のインデックスで指定することも可能。

> lis[2]
[[1]]
[1] "ウマ娘" "ライザのアトリエ2" "推しの子"
> lis[2:3]
[[1]]
[1] "ウマ娘" "ライザのアトリエ2" "推しの子"
[[2]]
[1] "石見舞菜香" "和多田美咲"

[[ ]]演算子は指定の要素をベクトルで返す。複数のインデックスで指定することはできず、以下の例のとおりc(○,×)と指定すると、要素がベクトルであれば、リストの○番目の要素の、その要素の×番目のベクトルの要素を返す。

> lis[[2]]
[1] "ウマ娘" "ライザのアトリエ2" "推しの子"
> lis[[c(2, 1)]]
[1] "ウマ娘"
> lis[[c(3, 2)]]
[1] "和多田美咲"

リストの複数の要素をベクトルでまとめて返したい場合は、unlist関数を利用する。

> unlist(lis[2:3])
[1] "ウマ娘" "ライザのアトリエ2" "推しの子"
[4] "石見舞菜香" "和多田美咲"

2024年2月15日 (木)

[R]リストの各要素に一括で関数を適用する

lapply関数かsapply関数を使う。この2つの関数の処理は同じで、戻り値が前者はリスト、後者はベクトル(各要素の戻り値が複数になる場合はリスト)と異なるだけ。以下は、3つの英文を空白で分割し、3つの文の分割した各要素数とそれらの要素(文字列)の長さを調べた例。

> s <- character(3)
> s[1] <- "Iwami Manaka played the part of Rice Shower."
> s[2] <- "She's very good in the part."
> s[3] <- "She's a brilliant actress."
> words <- strsplit(s, "\\s+")
> print(words)
[[1]]
[1] "Iwami" "Manaka" "played" "the" "part" "of" "Rice" "Shower."
[[2]]
[1] "She's" "very" "good" "in" "the" "part."
[[3]]
[1] "She's" "a" "brilliant" "actress."
> lapply(words, length)
[[1]]
[1] 8
[[2]]
[1] 6
[[3]]
[1] 4
> sapply(words, length)
[1] 8 6 4
> lapply(words, nchar)
[[1]]
[1] 5 6 6 3 4 2 4 7
[[2]]
[1] 5 4 4 2 3 5
[[3]]
[1] 5 1 9 8
> sapply(words, nchar)
[[1]]
[1] 5 6 6 3 4 2 4 7
[[2]]
[1] 5 4 4 2 3 5
[[3]]
[1] 5 1 9 8

2022年8月25日 (木)

[R]リストの要素を逆順に並び替える

rev関数を使う。

> n <- 1:3
> s <- c("A", "B", "C")
> d <- c(2.4, 6.8)
> lst <- list(n, s, d)
> print(lst)
[[1]]
[1] 1 2 3
[[2]]
[1] "A" "B" "C"
[[3]]
[1] 2.4 6.8
> print(rev(lst))
[[1]]
[1] 2.4 6.8
[[2]]
[1] "A" "B" "C"
[[3]]
[1] 1 2 3

2022年8月12日 (金)

[R]リストの要素数を調べる

length関数を使う。

> n <- 1:10
> s <- c("A", "B", "C")
> lst <- list(n, s)
> print(lst)
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10
[[2]]
[1] "A" "B" "C"
> length(lst)
[1] 2

2022年8月 5日 (金)

[R]リストに要素を追加する

append関数を使う。デフォルトでは最後に追加する。特定の要素の後に追加したい場合は、afterオプションに挿入前のインデックスを指定する。

> n <- 1:3
> s <- c("A", "B", "C")
> d <- c(1.1, 2.2, 3.3)
> lst0 <- list(n, s)
> print(lst0)
[[1]]
[1] 1 2 3
[[2]]
[1] "A" "B" "C"
> lst1 <- append(lst0, list(d))
> print(lst1)
[[1]]
[1] 1 2 3
[[2]]
[1] "A" "B" "C"
[[3]]
[1] 1.1 2.2 3.3
> lst2 <- append(lst0, list(d), after = 1)
> print(lst2)
[[1]]
[1] 1 2 3
[[2]]
[1] 1.1 2.2 3.3
[[3]]
[1] "A" "B" "C"

2022年7月27日 (水)

[R]リストをベクトルに変換する

unlist関数を使う。オブジェクトの方が異なる場合は、一つに揃えられるので注意。以下の例では、数値型が文字列型に強制変換されて、ベクトル化されている。

> lst <- list(1:3, c("A", "B", "C"))
> print(lst)
[[1]]
[1] 1 2 3
[[2]]
[1] "A" "B" "C"
> unlist(lst)
[1] "1" "2" "3" "A" "B" "C"

2022年7月26日 (火)

[R]リストから要素を取り出す

[ ]演算子と[[ ]]演算子を使う。それぞれインデックスを与える。[ ]演算子は要素をリストで、[[ ]]演算子は要素をベクトルで返す。

> n <- 1:3
> s <- c("A", "B", "C")
> lst <- list(n, s)
> lst[2]
[[1]]
[1] "A" "B" "C"
> lst[[2]]
[1] "A" "B" "C"

より以前の記事一覧