R(ベクトル)

2026年4月15日 (水)

[R]ベクトルを作成する

c関数を使う。引数に各要素の値を,(コンマ)で区切って指定する。要素ではなく他のベクトルを指定することもでき、その場合はそのベクトルの要素すべてを指定したことになる。ベクトルとは同じ型の値をひとまとめにしたものであり、最後の例のとおり、型が異なる要素を指定すると、適当に強制変換されて作成されてしまうことに注意。

> n <- c(101, 102, 103)
> print(n)
[1] 101 102 103
> n <- c(n, 104)
> print(n)
[1] 101 102 103 104
> s <- c("イレイナ", "帰忘の流離人", "セナディア")
> print(s)
[1] "イレイナ" "帰忘の流離人" "セナディア"
> s <- c("ルアン・メェイ", s)
> print(s)
[1] "ルアン・メェイ" "イレイナ" "帰忘の流離人" "セナディア"
> print(c(1, 2, "3"))
[1] "1" "2" "3"

2026年3月24日 (火)

[R]複数の各ベクトルの要素同士によるすべての組合せを作成する

tidyrパッケージ(tidyverseパッケージに含まれている)のexpand_gridを使う。戻り値はtibble。以下では簡潔な表示にするためデータフレームに変換して表示している。

> s1 <- c("ルアン・メェイ", "帰忘の流離人", "キャストリス")
> s2 <- c("セナディア", "ヘリア")
> s3 <- c("カンタレラ", "シャコンヌ")
> library(tidyr)
> expand_grid(h3 = s1, hs = s2) |> as.data.frame()
h3 hs
1 ルアン・メェイ セナディア
2 ルアン・メェイ ヘリア
3 帰忘の流離人 セナディア
4 帰忘の流離人 ヘリア
5 キャストリス セナディア
6 キャストリス ヘリア
> expand_grid(h3 = s1, hs = s2, ww = s3) |> as.data.frame()
h3 hs ww
1 ルアン・メェイ セナディア カンタレラ
2 ルアン・メェイ セナディア シャコンヌ
3 ルアン・メェイ ヘリア カンタレラ
4 ルアン・メェイ ヘリア シャコンヌ
5 帰忘の流離人 セナディア カンタレラ
6 帰忘の流離人 セナディア シャコンヌ
7 帰忘の流離人 ヘリア カンタレラ
8 帰忘の流離人 ヘリア シャコンヌ
9 キャストリス セナディア カンタレラ
10 キャストリス セナディア シャコンヌ
11 キャストリス ヘリア カンタレラ
12 キャストリス ヘリア シャコンヌ
> expand_grid(h3 = s1, hs = s2, ww = s3) |> class()
[1] "tbl_df" "tbl" "data.frame"

2026年3月23日 (月)

[R]複数の各ベクトルの要素同士によるすべての組合せを作成する

expand.gridを使う。戻り値はデータフレーム。

> s1 <- c("ルアン・メェイ", "帰忘の流離人", "キャストリス")
> s2 <- c("セナディア", "ヘリア")
> s3 <- c("カンタレラ", "シャコンヌ")
> expand.grid(h3 = s1, hr = s2)
h3 hr
1 ルアン・メェイ セナディア
2 帰忘の流離人 セナディア
3 キャストリス セナディア
4 ルアン・メェイ ヘリア
5 帰忘の流離人 ヘリア
6 キャストリス ヘリア
> expand.grid(h3 = s1, hs = s2)
h3 hs
1 ルアン・メェイ セナディア
2 帰忘の流離人 セナディア
3 キャストリス セナディア
4 ルアン・メェイ ヘリア
5 帰忘の流離人 ヘリア
6 キャストリス ヘリア
> expand.grid(h3 = s1, hs = s2, ww = s3)
h3 hs ww
1 ルアン・メェイ セナディア カンタレラ
2 帰忘の流離人 セナディア カンタレラ
3 キャストリス セナディア カンタレラ
4 ルアン・メェイ ヘリア カンタレラ
5 帰忘の流離人 ヘリア カンタレラ
6 キャストリス ヘリア カンタレラ
7 ルアン・メェイ セナディア シャコンヌ
8 帰忘の流離人 セナディア シャコンヌ
9 キャストリス セナディア シャコンヌ
10 ルアン・メェイ ヘリア シャコンヌ
11 帰忘の流離人 ヘリア シャコンヌ
12 キャストリス ヘリア シャコンヌ
> class(expand.grid(h3 = s1, hs = s2, ww = s3))
[1] "data.frame"

2026年3月18日 (水)

[R]2組のベクトルの各要素同士によるすべての組合せによる演算結果を得る

outer関数もしくは%o%演算子を使う。outer関数は特に演算子を指定しなければ積を計算する。%o%演算子も積を計算する。これを和や差にしたい場合はouter関数の第三引数に、その演算子を指定する。戻り値は行列。行と列を入れ替えたければt関数を使えばよい。第三引数には関数を与えてもよい。

> x <- c(1, 2, 3)
> y <- c(10, 20, 30, 40)
> outer(x, y)
[,1] [,2] [,3] [,4]
[1,] 10 20 30 40
[2,] 20 40 60 80
[3,] 30 60 90 120
> x %o% y
[,1] [,2] [,3] [,4]
[1,] 10 20 30 40
[2,] 20 40 60 80
[3,] 30 60 90 120
> outer(x, y, "+")
[,1] [,2] [,3] [,4]
[1,] 11 21 31 41
[2,] 12 22 32 42
[3,] 13 23 33 43
> outer(x, y, "-")
[,1] [,2] [,3] [,4]
[1,] -9 -19 -29 -39
[2,] -8 -18 -28 -38
[3,] -7 -17 -27 -37
> outer(x, y, "-") |> t()
[,1] [,2] [,3]
[1,] -9 -8 -7
[2,] -19 -18 -17
[3,] -29 -28 -27
[4,] -39 -38 -37
> f <- function(x, y) {x ^ 2 + y ^ 3}
> outer(x, y, f)
[,1] [,2] [,3] [,4]
[1,] 1001 8001 27001 64001
[2,] 1004 8004 27004 64004
[3,] 1009 8009 27009 64009

2026年3月10日 (火)

[R]ベクトルの要素すべてが同じかどうか調べる

setequal関数を使う。指定した2つのベクトルの要素がまったく同じであればTRUEを返す。集合として等しいかどうかを判定しており、最後の例のとおり、要素の順番が異なっても属する要素が同じであればTRUEを返す。

> chara1 <- c("ルアン・メェイ", "帰忘の流離人", "イレイナ")
> chara2 <- c("ルアン・メェイ", "帰忘の流離人", "イレイナ", "アストラ")
> setequal(chara1, chara2)
[1] FALSE
> chara2 <- c("ルアン・メェイ", "帰忘の流離人", "イレイナ")
> setequal(chara1, chara2)
[1] TRUE
> chara2 <- c("イレイナ", "ルアン・メェイ", "帰忘の流離人")
> setequal(chara1, chara2)
[1] TRUE

2026年3月 9日 (月)

[R]ベクトルに特定の要素が含まれているかどうか調べる

is.element関数を使う。第一引数に含まれているかどうか調べたい要素を、第二引数には調べる対象の集合をベクトルで指定する。調べたい要素は複数同時に指定できる。%in%演算子を使っても同じ結果が得られる。

> chara <- c("ルアン・メェイ", "帰忘の流離人", "イレイナ", "アストラ")
> is.element("キャストリス", chara)
[1] FALSE
> is.element("ルアン・メェイ", chara)
[1] TRUE
> is.element(c("アストラ", "ホタル", "帰忘の流離人"), chara)
[1] TRUE FALSE TRUE
> c("アストラ", "ホタル", "帰忘の流離人") %in% chara
[1] TRUE FALSE TRUE

2025年12月22日 (月)

[R]ベクトルの各要素にまとめて演算を行う

Rでは、プログラミング言語でいうところの変数はベクトルといい、値や情報を一つ以上まとめて格納できる配列である。そのため、特定の処理以外は、演算は原則として各要素に一つずつまとめて行うことになる。

> d <- 8
> print(2 ^ d)
[1] 256
> d <- c(0, 1, 2, 3, 4, 5, 6, 7, 8)
> print(2 ^ d)
[1] 1 2 4 8 16 32 64 128 256
> s <- c("石見舞菜香", "鈴木みのり", "野口瑠璃子", "和多田美咲")
> print(paste(s , "さん", sep = ""))
[1] "石見舞菜香さん" "鈴木みのりさん" "野口瑠璃子さん" "和多田美咲さん"

演算の戻り値は、元のベクトルと同じ要素数を持つベクトルになる。そのため、それをそのまま次の演算に使用することができる。

> s <- c("瀬戸麻沙美", "優木かな")
> print(paste(s , "さん", sep = ""))
[1] "瀬戸麻沙美さん" "優木かなさん"
> print(paste(s , "さん", sep = "") |> paste("、すごくかわいい", sep = ""))
[1] "瀬戸麻沙美さん、すごくかわいい" "優木かなさん、すごくかわいい"

すべての演算をまとめて行うことができるわけではないことに注意。例えば、if文の条件式は一つの要素しか扱うことができず、要素の数が一つではないベクトルを指定するとエラーが発生する。

> if (s == "石見舞菜香") print("ライスシャワー")
if (s == "石見舞菜香") print("ライスシャワー") でエラー:
the condition has length > 1
> if (s[1] == "石見舞菜香") print("ライスシャワー")
[1] "ライスシャワー

2025年11月18日 (火)

[R]ベクトルから条件に一致する要素のインデックスを抽出する

which関数を使う。一致する要素が無い場合は、長さが0のベクトルを返す。戻り値は、指定した条件に一致する要素のインデックス(構成する要素に割り振られた1から始まる連番)であり、要素そのものではないことに注意。

> n <- 2 ^ (0:12)
> print(n)
[1] 1 2 4 8 16 32 64 128 256 512 1024 2048 4096
> which(n > 1000)
[1] 11 12 13
> which(n > 10000)
integer(0)
> length(which(n > 10000))
[1] 0
> ss <- c("鈴木みのり", "鈴木みのり", "瀬戸麻沙美", "のぐちゆり", "和多田美咲")
> which(ss == "瀬戸麻沙美")
[1] 3
> which(ss == "鈴木みのり" | ss == "のぐちゆり")
[1] 1 2 4

2025年11月17日 (月)

[R]ベクトルから条件に一致する要素を抽出する

ベクトルはインデックス(構成する要素に割り振られた1から始まる連番)の指定に、ベクトルと同じ長さの論理型ベクトルを与えると、ブール値がTRUEの要素だけを取り出すため、これを利用する。一致する要素が無い場合は、長さが0のベクトルを返す。

> n <- 2 ^ (0:12)
> print(n)
[1] 1 2 4 8 16 32 64 128 256 512 1024 2048 4096
> n > 1000
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
> n[n > 1000]
[1] 1024 2048 4096
> n[n > 10000]
numeric(0)
> length(n[n > 10000])
[1] 0
> ss <- c("鈴木みのり", "鈴木みのり", "瀬戸麻沙美", "のぐちゆり", "和多田美咲")
> ss[ss == "瀬戸麻沙美"]
[1] "瀬戸麻沙美"
> ss[ss == "鈴木みのり" | ss == "のぐちゆり"]
[1] "鈴木みのり" "鈴木みのり" "のぐちゆり"
> ss[grep("美", ss)]
[1] "瀬戸麻沙美" "和多田美咲"

2024年12月17日 (火)

[R]ベクトルから指定の条件に一致する要素を抜き出す

which関数を使う。戻り値はインデックスであることに注意。指定の条件に一致する要素がない場合は、長さが0のベクトルが返される。最後の例のとおり、|記号(||記号ではない!)を使うと複数の条件を指定することもできる。

> n <- 2 ^ (0:8)
> print(n)
[1] 1 2 4 8 16 32 64 128 256
> which(n > 100)
[1] 8 9
> which(n > 1000)
integer(0)
> length(which(n > 100))
[1] 2
> length(which(n > 1000))
[1] 0
> seiyu <- c("安野希世乃", "鈴木みのり", "本渡楓")
> which(seiyu == "鈴木みのり")
[1] 2
> which(seiyu == "鈴木みのり" | seiyu == "本渡楓")
[1] 2 3

より以前の記事一覧

無料ブログはココログ

■■

■■■