R(数と式)

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

2023年12月12日 (火)

[R]文字列から数値を作成する

as.numeric関数を使う。Rでは数値の扱いはデフォルトでは浮動小数点数(実数)のため、特に指定しない限り整数を表す文字列は浮動小数点数として扱われる。これを整数として扱うにはas.integer関数を使う。as.double関数はas.numeric関数と同じである。

> s <- c("0", "1", "-2", "3.14")
> print(s)
[1] "0" "1" "-2" "3.14"
> as.numeric(s)
[1] 0.00 1.00 -2.00 3.14
> as.integer(s)
[1] 0 1 -2 3
> as.double(s)
[1] 0.00 1.00 -2.00 3.14
> as.numeric(c("0", "1", "-2", "3.14", "abc"))
[1] 0.00 1.00 -2.00 3.14 NA
警告メッセージ:
強制変換により NA が生成されました

最後の例のとおり、数値を表さない文字列の場合は警告が発生し、数値ではなく強制的にNAに変換される。

2023年9月20日 (水)

[R]任意の進数表記の文字列を任意の進数に変換する

strtoi関数を使う。baseオプションに変換したい進数の値(2進数なら2、10進数なら10、・・・)を与える。

> strtoi("01111", base = 10)
[1] 1111
> strtoi("01111", base = 2)
[1] 15
> strtoi("f", base = 16)
[1] 15
> strtoi("ff", base = 16)
[1] 255

2022年9月 6日 (火)

[R]数値型と数値リテラル

Rでよく使われる数値には2種類ある。

  1. 整数型
  2. 浮動小数点数型

1は整数を扱う。2はいわゆる実数を扱う。

整数型の数値ベクトルを作成するには、as.integer関数を使う。浮動小数点数型の数値ベクトルとはas.double関数を使う。

> n <- as.integer(3)
> d <- as.double(4.5)
> typeof(n)
[1] "integer"
> typeof(d)
[1] "double"

ここで、式や関数の引数で使う、3や4.5といった数値を表したものを数値リテラルという。3は整数リテラル、4.5は浮動小数点数リテラルという。だが、Rでは通常の計算は全て浮動小数点数で扱われるため、整数や浮動小数点数といったことを意識することはあまりない。

> typeof(3)
[1] "double"
> typeof(4.5)
[1] "double"

これまでベクトルのインデックスには演算子[ ]を使用して数値型ベクトルを与えて使用してきたが、与える数値は明示的に整数型にしなくてもよい。この場合は、与えた数値型ベクトルの要素は強制的に整数されてしまう(小数点以下が無視される)。

> s <- c("A", "B", "C")
> s[c(2, 3)]
[1] "B" "C"
> s[c(2.1, 3)]
[1] "B" "C"
> s[c(2.1, 3.9)]
[1] "B" "C"

これは浮動小数点数型を与えてもよいと理解せずに、ベクトルのインデックスには整数リテラルを与えるようにすること。

2022年8月15日 (月)

[R]乱数を発生させる

runif関数を使う。第一引数には発生させる乱数の数を指定する。デフォルトでは、0~1の範囲の小数を返す。

> runif(5)
[1] 0.67853053 0.11993910 0.88077171 0.27966928 0.07728223
> d <- runif(1.e5)
> hist(d)

発生させる乱数の最小値と最大値は、それぞれminオプション、maxオプションで指定することができる。

> d <- runif(1000, min = 100, max = 300)
> hist(d)

2022年8月13日 (土)

[R]指定した桁で数値を丸める

roudn関数を使う。第一引数には対象となる数を、第二引数には丸める判定を行う小数点以下第何位の数かを指定する。

> sprintf("%.5f", round(c(1.23, 1.24, 1.25, 2.23, 2.24, 2.25), 1))
[1] "1.20000" "1.20000" "1.20000" "2.20000" "2.20000" "2.20000"

2022年8月11日 (木)

[R]小数点以下の四捨五入を行う

round関数を使う。JIS規格 (JIS Z 8401) による偶数丸めであることに注意。

> sprintf("%.5f", round(c(1.3, 1.4, 1.5, 2.3, 2.4, 2.5)))
[1] "1.00000" "1.00000" "2.00000" "2.00000" "2.00000" "2.00000"

2022年8月10日 (水)

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

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

> sprintf("%.5f", ceiling(c(1.23, -1.23, 0.1, -0.1)))
[1] "2.00000" "-1.00000" "1.00000" "-0.00000"

2022年8月 9日 (火)

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

trunc関数を使う。

> sprintf("%.5f", trunc(c(1.23, -1.23, 0.1, -0.1)))
[1] "1.00000" "-1.00000" "0.00000" "-0.00000"

似たような機能を持つfloorという関数もある。こちらは、その数より小さい最大の整数を返す。

> sprintf("%.5f", floor(c(1.23, -1.23, 0.1, -0.1)))
[1] "1.00000" "-2.00000" "0.00000" "-1.00000"

2022年8月 7日 (日)

[R]16進数で計算をする

数値リテラルに0xを付けて計算するかas.hexmode関数を使う。0xを付けて計算をすると戻り値は10進数かつ数値型。as.hexmode関数の戻り値を含めると、戻り値は16進数かつ文字列になることに注意。


> 9 + 2
[1] 11
> 0x9 + 0x2
[1] 11
> 0x9 + 2
[1] 11
> 0xb
[1] 11
> as.hexmode("9") + as.hexmode("2")
[1] "b"
> as.hexmode("9") + 2
[1] "b"

より以前の記事一覧