R(数と式)

2026年3月29日 (日)

[R]数値を二進法で表記する

以下は、数値(1,3,5,7,11,13)を二進法で表記した例。「0」と「1」からなる文字列で表記している。intToBits関数は、与えた数値を二進数に変換して返すが、戻り値はraw型でかつ長さが32のベクトルのため、最初の4ビット分だけを表示するように工夫している。

> paste0(rev(as.character(as.integer(intToBits(1)))[1:4]), collapse = "")
[1] "0001"
> paste0(rev(as.character(as.integer(intToBits(3)))[1:4]), collapse = "")
[1] "0011"
> paste0(rev(as.character(as.integer(intToBits(5)))[1:4]), collapse = "")
[1] "0101"
> paste0(rev(as.character(as.integer(intToBits(7)))[1:4]), collapse = "")
[1] "0111"
> paste0(rev(as.character(as.integer(intToBits(11)))[1:4]), collapse = "")
[1] "1011"
> paste0(rev(as.character(as.integer(intToBits(13)))[1:4]), collapse = "")
[1] "1101"

2026年1月23日 (金)

[R]複素数の共役複素数を得る

Conj関数を使う。

> z <- complex(real = 1:3, imaginary = 4:6)
> print(z)
[1] 1+4i 2+5i 3+6i
> Conj(z)
[1] 1-4i 2-5i 3-6i

2026年1月22日 (木)

[R]複素数の偏角を得る

Arg関数を使う。最後の手計算による結果と一致していることがわかる。

> z <- complex(real = 1:3, imaginary = 4:6)
> Arg(z)
[1] 1.325818 1.190290 1.107149
> atan(Im(z) / Re(z))
[1] 1.325818 1.190290 1.107149

2026年1月20日 (火)

[R]複素数の絶対値を得る

Mod関数を使う。最後の手計算による結果と一致していることがわかる。

> z <- complex(real = 1:3, imaginary = 4:6)
> print(z)
[1] 1+4i 2+5i 3+6i
> Mod(z)
[1] 4.123106 5.385165 6.708204
> sqrt(Re(z) ^ 2 + Im(z) ^ 2)
[1] 4.123106 5.385165 6.708204

2026年1月19日 (月)

[R]複素数の実部(虚部)の値を取り出す

複素数から実部の値を取り出すにはRe関数を、虚部の値を取り出すにはIm関数を使う。それぞれ戻り値は実数。

> z <- complex(real = 1:3, imaginary = 4:6)
> print(z)
[1] 1+4i 2+5i 3+6i
> Re(z)
[1] 1 2 3
> Im(z)
[1] 4 5 6
> typeof(Re(z))
[1] "double"
> typeof(Im(z))
[1] "double"
> sqrt(Re(z) ^ 2 + Im(z) ^ 2)
[1] 4.123106 5.385165 6.708204

2026年1月 2日 (金)

[R]空の数値型ベクトルをまとめて作成する

整数の場合はinteger関数、実数の場合はdouble関数を使う。引数に作成したいベクトルの個数を指定する。指定しないと長さが0のベクトルを返す。作成された要素の初期値は0(Each element of the vector is equal to 0.)。numeric関数もあり、これはdouble関数とまったく同じ。

> i <- integer()
> length(i)
[1] 0
> is.integer(i)
[1] TRUE
> is.double(i)
[1] FALSE
> d <- double()
> length(d)
[1] 0
> is.integer(d)
[1] FALSE
> is.double(d)
[1] TRUE
> n <- numeric()
> is.integer(n)
[1] FALSE
> is.double(n)
[1] TRUE
> i <- integer(3)
> print(i)
[1] 0 0 0
> print(i + 4)
[1] 4 4 4
> d <- double(5)
> print(d)
[1] 0 0 0 0 0
> print(d + 6)
[1] 6 6 6 6 6

2025年8月26日 (火)

[R]小数点以下の切り上げを行う

ceiling関数を使う。厳密には、引数に与えた数値より大きい最小の整数を返すことに注意。

> d <- c(0.4, 0.5, 0.6, 1.4, 1.5, 1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], ceiling(d[i])))
0.400000 -> 1.000000
0.500000 -> 1.000000
0.600000 -> 1.000000
1.400000 -> 2.000000
1.500000 -> 2.000000
1.600000 -> 2.000000
> d <- c(-0.4, -0.5, -0.6, -1.4, -1.5, -1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], ceiling(d[i])))
-0.400000 -> -0.000000
-0.500000 -> -0.000000
-0.600000 -> -0.000000
-1.400000 -> -1.000000
-1.500000 -> -1.000000
-1.600000 -> -1.000000

2025年7月20日 (日)

[R]小数点以下の切り捨てを行う

trunc関数を使う。引数に与えた数値の小数点以下を、強制的に切り捨てていると考えればよい。

> d <- c(0.4, 0.5, 0.6, 1.4, 1.5, 1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], trunc(d[i])))
0.400000 -> 0.000000
0.500000 -> 0.000000
0.600000 -> 0.000000
1.400000 -> 1.000000
1.500000 -> 1.000000
1.600000 -> 1.000000
> d <- c(-0.4, -0.5, -0.6, -1.4, -1.5, -1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], trunc(d[i])))
-0.400000 -> -0.000000
-0.500000 -> -0.000000
-0.600000 -> -0.000000
-1.400000 -> -1.000000
-1.500000 -> -1.000000
-1.600000 -> -1.000000

似たような機能を持つfloor関数もあるが、こちらは小数点以下を強制的に切り捨てているのではなく、引数に与えた数値を超えない最大の整数を返すことに注意。つまり、負数の場合はtrunc関数とfloor関数では動作が異なる。

> d <- c(0.4, 0.5, 0.6, 1.4, 1.5, 1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], floor(d[i])))
0.400000 -> 0.000000
0.500000 -> 0.000000
0.600000 -> 0.000000
1.400000 -> 1.000000
1.500000 -> 1.000000
1.600000 -> 1.000000
> d <- c(-0.4, -0.5, -0.6, -1.4, -1.5, -1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], floor(d[i])))
-0.400000 -> -1.000000
-0.500000 -> -1.000000
-0.600000 -> -1.000000
-1.400000 -> -2.000000
-1.500000 -> -2.000000
-1.600000 -> -2.000000

2024年12月 4日 (水)

[R]10進数を16進数に変換する

as.hexmode関数を使う。ベクトルを扱うことができる。戻り値は画面表示では文字列に見えるが、整数であることに注意。

> as.hexmode(0:15)
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f"
> as.hexmode(249:255)
[1] "f9" "fa" "fb" "fc" "fd" "fe" "ff"
> as.hexmode(13:16)
[1] "0d" "0e" "0f" "10"
> as.hexmode(13:16) + 1
[1] "0e" "0f" "10" "11"
> typeof(as.hexmode(13:16))
[1] "integer"

2024年1月11日 (木)

[R]ランダムに作成された整数からなる数値型ベクトルを作成する

runif関数とtrunc関数を組み合わせて使う。runif関数はrunif(n, a, b)とすると、a < x < bなるxがn個からなる数値型ベクトルを返す。trunc関数は引数に与えた数値の小数点以下を切り捨てて返す関数(正数も負数も0に寄せる方向に切り捨てる)。

runif関数のヘルプには以下のような記述があり、指定した範囲は原則開区間(両端の値を含まない区間)になることに注意。

runif will not generate either of the extreme values unless max = min or max-min is small compared to min, and in particular not for the default arguments.

以下は、無作為抽出により0~10の11個の整数からなる、要素数が5の数値型ベクトルを作成した例。runif関数の第1引数に指定した数だけ乱数が作成される。上記のとおりrunif関数に指定の範囲は開区間のため、runif関数の第3引数には1加えた11を指定していることに注意。最後はtable関数で100万個の整数を作成した際の度数分布表を表示しており、0~10から均等に抽出されていることがわかる。

> floor(runif(5, 0, 11))
[1] 7 8 10 4 9
> floor(runif(5, 0, 11))
[1] 4 3 4 0 6
> floor(runif(5, 0, 11))
[1] 3 4 5 5 9
> floor(runif(5, 0, 11))
[1] 3 0 10 7 3
> table(floor(runif(1000000, 0, 11)))
0 1 2 3 4 5 6 7 8 9 10
91093 90902 90937 90639 91052 90885 90969 90530 91507 90554 90932
無料ブログはココログ

■■

■■■