R(ベクトル)

2022年12月18日 (日)

[R]ベクトルの特殊な値(NULL, NA, NaN, Inf)

NULL

ヌル。要素が空であること。この「空」とは、0や""が入っているわけではなく、それすら格納されていない、まっさらな状態ということ。NULLか否かの判定には、is.null関数を使う。

> n <- c(NULL)
> print(n)
NULL
> length(n)
[1] 0
> n <- c(1:2, NULL, 3:5)
> print(n)
[1] 1 2 3 4 5
> length(n)
[1] 5
> print(is.null(NULL))
[1] TRUE
> print(is.null(NA))
[1] FALSE
> print(is.null(NaN))
[1] FALSE

よくある使い方として、for文などで繰り返し値を追加するベクトルの初期化に使われる。

> n <- as.integer(NULL)
> print(n)
integer(0)
> for (i in 1:4) n <- append(n, 2 ^ i)
> print(n)
[1] 2 4 8 16

 

NA

Not Available。欠損値のこと。ベクトルの特殊な値の一つ。NAはどのような演算をしても、演算結果はNAになる。NAか否かの判定にはis.na関数を使う。

> n <- c(1, 2, NA, 4)
> print(n)
[1] 1 2 NA 4
> print(n + 10)
[1] 11 12 NA 14
> print(n / 2)
[1] 0.5 1.0 NA 2.0
> print(n == 1)
[1] TRUE FALSE NA FALSE
> print(is.na(n))
[1] FALSE FALSE TRUE FALSE

 

NaN

ナン。Not A Number。非数のこと。ベクトルの特殊な値の一つ。ゼロ除算などで正常な演算結果が得られなかった場合にNaNになる。NaNか否かの判定にはis.nan関数を使う。

> print(0 / 0)
[1] NaN
> print(Inf / Inf)
[1] NaN
> is.nan(NA)
[1] FALSE
> is.nan(Inf / Inf)
[1] TRUE

 

Inf

数値計算における無限大(∞)のこと。ベクトルの特殊な値の一つ。演算結果が無限大になる演算結果がInfになる。数学同様、負数の無限大もある。Infか否かの判定には、is.infinite関数を使う。

> print(1 / 0)
[1] Inf
> print(-1 / 0)
[1] -Inf
> 1 / 1.e-308
[1] 1e+308
> 1 / 1.e-309
[1] Inf
> n <- c(1, 2, Inf, 4)
> print(n)
[1] 1 2 Inf 4
> print(is.infinite(n))
[1] FALSE FALSE TRUE FALSE

2022年10月 6日 (木)

[R]ベクトルを連結する

c関数を使う。

> n1 <- 1:3
> n2 <- 4:7
> print(n1)
[1] 1 2 3
> print(n2)
[1] 4 5 6 7
> print(c(n1, n2))
[1] 1 2 3 4 5 6 7

2022年9月 5日 (月)

[R]ベクトルから指定の要素を取り除く

要素を取り出す場合、インデックスに正数の数値を与えればよいが、取り除く場合は、インデックスに負数の数値を与えればよい。

> s <- c("A", "B", "C", "D", "E")
> s[c(1, 2, 4)]
[1] "A" "B" "D"
> s[-c(1, 2, 4)]
[1] "C" "E"
> s[c(-1, -2, -4)]
[1] "C" "E"
> s[-c(100)]
[1] "A" "B" "C" "D" "E"

最後の例のとおり、存在しないインデックスの負数を与えると無視される。

2022年8月24日 (水)

[R]ベクトルの要素を逆順に並び替える

rev関数を使う。

> n <- c(1:3, 5:4)
> s <- c("A", "B", "D", "C")
> print(n)
[1] 1 2 3 5 4
> print(s)
[1] "A" "B" "D" "C"
> print(rev(n))
[1] 4 5 3 2 1
> print(rev(s))
[1] "C" "D" "B" "A"

2022年7月21日 (木)

[R]ベクトルの要素をソートする

並び替えた結果を値で得る場合はsort関数を、その並び替えられたインデックスが欲しい場合はorder関数を使う。デフォルトでは昇順で返す。降順で返す場合はdecreasingにTRUEを与える。

> d <- c(4.0, 0.0, -3.2, 5.1)
> sort(d)
[1] -3.2 0.0 4.0 5.1
> order(d)
[1] 3 2 1 4
> sort(d, decreasing = TRUE)
[1] 5.1 4.0 0.0 -3.2
> order(d, decreasing = TRUE)
[1] 4 1 2 3

文字列にも使える。

> s <- c("A", "AB", "ABC", "ab", "あい", "阿")
> sort(s)
[1] "A" "ab" "AB" "ABC" "あい" "阿"
> order(s)
[1] 1 4 2 3 5 6
> sort(s, decreasing = TRUE)
[1] "阿" "あい" "ABC" "AB" "ab" "A"
> order(s, decreasing = TRUE)
[1] 6 5 3 2 4 1

2022年7月17日 (日)

[R]ベクトルの要素をソートする

sort関数を使う。数値も文字列も並び替えることができる。逆順に並び替えるときはdecreasingオプションにTRUEを与える。



> n <- c(1, 0, 4, 9)
> n
[1] 1 0 4 9
> sort(n)
[1] 0 1 4 9
> sort(n, decreasing = TRUE)
[1] 9 4 1 0
> s <- c("x", "z", "abc", "ab", "A")
> s
[1] "x" "z" "abc" "ab" "A"
> sort(s)
[1] "A" "ab" "abc" "x" "z"

2022年7月15日 (金)

[R]ベクトルの長さ(要素数)を調べる

length関数を使う。

> d <- c(1.0, 2.0, 3.0)
> length(d)
[1] 3
> n <- 0:255
> length(n)
[1] 256
> d <- double()
> length(d)
[1] 0

最後の例のとおり、何も代入されていない空のベクトルは長さが0となる。

2022年7月 9日 (土)

[R]行列から特定の行か特定の列のみ取り出す

インデックスを指定する際に、数値を与えずに空欄のままにする。以下の例ではそれぞれ2行目のみ、3列目のみを取り出している。

> mx <- matrix(1:9, 3, 3)
> print(mx)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> mx[2, ]
[1] 2 5 8
> mx[, 3]
[1] 7 8 9
> is.vector(mx[, 3])
[1] TRUE

最後のとおりに、1行(列)だけ取り出したものはベクトルになる。これを行列のままにする場合はdropオプションにFALSEを与える。

> mx[2, , drop = FALSE]
[,1] [,2] [,3]
[1,] 2 5 8

複数行(列)取り出したい場合は、インデックスをベクトルで与える。以下は2行目と3行目のみを取り出した例。

> mx[c(2, 3), ]
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 3 6 9

2022年6月29日 (水)

[R]ベクトルで条件分岐を行う

if文ではなくifelse関数を使う。以下、例。

> n <- 1:5
> n
[1] 1 2 3 4 5
> ifelse(n >= 3, "Yes", "No")
[1] "No" "No" "Yes" "Yes" "Yes"
> if (n >= 3) "Yes" else "No"
[1] "No"
警告メッセージ:
if (n >= 3) "Yes" else "No" で:
条件が長さが 2 以上なので、最初の 1 つだけが使われます

最後の例のとおり、通常のif分はベクトルの最初の要素しか扱われない。

2022年6月23日 (木)

[R]ベクトルから非数(NA)を取り除く

非数(NA)はその名のとおり数としては扱えない値であり、算術関数はNAが1つでも含まれていると、正常に動作しない。

> d <- c(20, 30, NA, 5)
> mean(d)
[1] NA
> max(d)
[1] NA

これを正常に動作させるには、is.na関数を使用してNAの要素を取り除けばよい。is.na関数は引数に与えたベクトルの要素がNAであればTRUE、そうでなければFALSEを返す。これを利用して、処理するベクトルの要素番号を指定して当該関数に与えればよい。

> is.na(d)
[1] FALSE FALSE TRUE FALSE
> d[!is.na(d)]
[1] 20 30 5
> mean(d[!is.na(d)])
[1] 18.33333
> max(d[!is.na(d)])
[1] 30
無料ブログはココログ