R(ベクトル)

2024年4月18日 (木)

[R]要素を一つも持たない空のベクトルを作る

要素にNULL指定して代入すればよい。

> s <- c(NULL)
> print(s)
NULL
> length(s)
[1] 0

空のベクトルが何の役に立つかというと、制御構文の都合でベクトルに値を代入だけをしたい場合は、最初に空にしておくことで、要素を代入する式のみ書けばいいことになり、すっきりしたスクリプトを書くことができる。

> s <- c(NULL)
> c(s, "鈴木みのり", "セナディア")
[1] "鈴木みのり" "セナディア"
> n <- c(NULL)
> print(n)
NULL
> for (i in 1:3) {n <- c(n, i)}
> print(n)
[1] 1 2 3

2024年4月16日 (火)

[R]ベクトルの要素の任意の場所に要素を追加する

append関数を使う。afterオプションには、挿入したい場所の直前のインデックスを指定する。

> s <- c("石見舞菜香", "のぐちゆり")
> s <- append(s, "和多田美咲", after = 1)
> print(s)
[1] "石見舞菜香" "和多田美咲" "のぐちゆり"

afterオプションに0を指定すると先頭に要素を挿入する。afterオプションのデフォルトの値はlength(s)であるので、何も指定しなければ、自動的に最後の要素の次に追加される。

> s <- append(s, "大橋彩香", after = 0)
> print(s)
[1] "大橋彩香" "石見舞菜香" "和多田美咲" "のぐちゆり"
> s <- append(s, "野口瑠璃子")
> print(s)
[1] "大橋彩香" "石見舞菜香" "和多田美咲" "のぐちゆり" "野口瑠璃子"

2024年4月12日 (金)

[R]ベクトルの要素の最後に要素を追加する

c関数を使う。

> s <- c("鈴木みのり", "石見舞菜香", "和多田美咲")
> print(s)
[1] "鈴木みのり" "石見舞菜香" "和多田美咲"
> s <- c(s, "のぐちゆり")
> print(s)
[1] "鈴木みのり" "石見舞菜香" "和多田美咲" "のぐちゆり"

append関数も使える。afterオプションには、挿入したい場所の直前のインデックスを指定できるが、afterオプションのデフォルトの値はlength(s)であるので、最後の要素の次に追加される。

> s <- append(s, "野口瑠璃子")
> print(s)
[1] "鈴木みのり" "石見舞菜香" "和多田美咲" "のぐちゆり" "野口瑠璃子"

2024年4月11日 (木)

[R]ベクトルの要素の先頭に要素を追加する

c関数を使う。

> s <- c("石見舞菜香", "和多田美咲", "のぐちゆり")
> print(s)
[1] "石見舞菜香" "和多田美咲" "のぐちゆり"
> s <- c("鈴木みのり", s)
> print(s)
[1] "鈴木みのり" "石見舞菜香" "和多田美咲" "のぐちゆり"

append関数も使える。afterオプションには、挿入したい場所の直前のインデックスを指定する。この例では先頭(=1)に挿入したいのでその直前である0を指定する。

> s <- append(s, "大橋彩香", after = 0)
> print(s)
[1] "大橋彩香" "鈴木みのり" "石見舞菜香" "和多田美咲" "のぐちゆり"

2024年3月29日 (金)

[R]ベクトルに値を代入する

代入演算子<-を使う。

> n <- 58
> s <- "ライスシャワー役の石見舞菜香さんかわいい"
> n
[1] 58
> s
[1] "ライスシャワー役の石見舞菜香さんかわいい"

2024年3月22日 (金)

[R]ベクトルのインデックスベクトルを作成する

seq_along関数は引数に指定したベクトルのインデックス(初項1、公差1、末項と項数がベクトルの長さの等差数列)となるベクトルを作成する。戻り値は1:length(v)(vはベクトル)と同じであり、これよりはシンプルな書き方をすることができる。

> s <- c("大橋彩香", "石見舞菜香", "優木かな", "和多田美咲")
> seq_along(s)
[1] 1 2 3 4
> 1:length(s)
[1] 1 2 3 4

2024年1月20日 (土)

[R]ベクトルの要素について集計する

table関数を使うと、ベクトルの要素に含まれる値を集計することができる。以下は英大文字を復元抽出で32個選び、それを集計した例。戻り値はテーブル型になる。

> LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P"
[17] "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
> s <- sample(LETTERS, 32, replace = TRUE)
> print(sort(s))
[1] "A" "C" "C" "D" "D" "G" "H" "H" "J" "K" "L" "L" "M" "M" "O" "O"
[17] "Q" "Q" "Q" "R" "U" "V" "V" "V" "W" "W" "W" "W" "X" "Y" "Y" "Z"
> tab <- table(s)
> print(tab)
s
A C D G H J K L M O Q R U V W X Y Z
1 2 2 1 2 1 1 2 2 2 3 1 1 3 4 1 2 1
> tab['A']
A
1
> tab[c('A', 'Q')]
s
A Q
1 3
> class(tab)
[1] "table"
> as.data.frame(tab)
s Freq
1 A 1
2 C 2
3 D 2
4 G 1
5 H 2
6 J 1
7 K 1
8 L 2
9 M 2
10 O 2
11 Q 3
12 R 1
13 U 1
14 V 3
15 W 4
16 X 1
17 Y 2
18 Z 1

2024年1月 4日 (木)

[R]ベクトルの要素をランダムに抽出する

sample関数を使う。引数にベクトルだけを与えると、要素をランダムに並び替えたベクトルを返す。第2引数に数値を指定すると、その数だけランダムに要素を選んだベクトルを返す。デフォルトでは非復元抽出(一度抜き取った標本を元に戻さずに次の標本を抽出すること)のため、与えたベクトルの要素数以上の値を指定すると、選べないためエラーが発生する。

> s <- c("A", "B", "C", "D", "E")
> sample(s)
[1] "D" "B" "A" "E" "C"
> sample(s)
[1] "B" "C" "E" "D" "A"
> sample(s, 3)
[1] "B" "E" "A"
> sample(s, 3)
[1] "D" "E" "C"
> sample(s, 6)
sample.int(length(x), size, replace, prob) でエラー:
'replace = FALSE' なので、母集団以上の大きさの標本は取ることができません

replaceオプションにTRUEを指定すると復元抽出(一度抜き取った標本を元に戻してから次の標本を抽出すること)になる。そのため、返されるベクトルの要素には重複が生じる。また、与えたベクトル以上の要素数を超える数値を指定してもランダムに選ばれて返される。

> sample(s, 3, replace = TRUE)
[1] "C" "E" "D"
> sample(s, 3, replace = TRUE)
[1] "B" "E" "E"
> sample(s, 6, replace = TRUE)
[1] "A" "D" "B" "C" "A" "A"

sample関数は乱数の処理に基づいて要素を抽出しており、特に指定をしなければ要素はランダムに選ばれ続ける。他の乱数の関数と同様に動作確認で乱数の発生を再現したい場合は、実行前にset.seed関数に適当な数値を指定して実行すればよい。同じ数値を指定してset.seed関数を実行すれば、乱数の発生を再現することができる。

> sample(s, 3, replace = TRUE)
[1] "E" "B" "E"
> sample(s, 3, replace = TRUE)
[1] "E" "D" "A"
> set.seed(3)
> sample(s, 3, replace = TRUE)
[1] "E" "B" "D"
> sample(s, 3, replace = TRUE)
[1] "D" "B" "C"
> set.seed(3)
> sample(s, 3, replace = TRUE)
[1] "E" "B" "D"
> sample(s, 3, replace = TRUE)
[1] "D" "B" "C"

2023年12月11日 (月)

[R]ロウ型ベクトルの値を置換する

[ ]演算子を利用する。以下は、ヌル(0x00)を空白(0x20)に置換する例。

> ch <- c(0x41:0x43, 0x00, 0x61:0x63, 0x00, 0x31:0x33)
> ra <- as.raw(ch)
> rawToChar(ra)
rawToChar(ra) でエラー:
文字列の中に nul が埋め込まれています: 'ABC\0abc\0123'
> ra[ra == as.raw(0x0)] <- as.raw(0x20)
> rawToChar(ra)
[1] "ABC abc 123"

2023年12月 7日 (木)

[R]ベクトルに要素を追加する

c関数を使う。Rにおける値の処理は基本的にベクトル単位のため、ベクトルを作成するc関数にベクトルを与えれば、複数のベクトルから1つのベクトルを作ることができる。

> s1 <- c("カナメ", "フレイア")
> s2 <- c("マキナ", "レイナ")
> s <- c(s1, "美雲", s2)
> print(s)
[1] "カナメ" "フレイア" "美雲" "マキナ" "レイナ"