R(数と式)

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"

2022年8月 6日 (土)

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

strtoi関数を使う。第一引数に変換したいn進数を文字列で、第二引数に変換したいn進数のnの値を整数で与える。

> strtoi(c("1", "10", "100"), 2L)
[1] 1 2 4
> strtoi(c("1", "10", "100"), 10L)
[1] 1 10 100
> strtoi(c("1", "10", "100"), 16L)
[1] 1 16 256
> strtoi(c("f", "ff", "fff"), 10L)
[1] NA NA NA
> strtoi(c("f", "ff", "fff"), 16L)
[1] 15 255 4095
> mode(strtoi(c("1", "10", "100"), 16L))
[1] "numeric"
> class(strtoi(c("1", "10", "100"), 16L))
[1] "integer"

変換できない文字列の場合はNAが返される。戻り値は数値型(整数)である。

2022年5月 7日 (土)

[R]複素数を使う

complex型ベクトルを使う。complex関数で簡単に作ることができる。第一引数には作成するベクトルの個数、第二引数には実部の値、第三引数には虚部の値を与える。

以下は、2+3iを作成した例。

> ri <- complex(1, 2, 3)
> print(ri)
[1] 2+3i

四則演算や累乗は、実数と同じ演算子を使用して簡単に計算することができる。

> ri1 <- complex(1, 3, -2)
> ri2 <- complex(1, 2, 5)
> print(ri1)
[1] 3-2i
> print(ri2)
[1] 2+5i
> print(ri1 + ri2)
[1] 5+3i
> print(ri1 - ri2)
[1] 1-7i
> print(ri1 * ri2)
[1] 16+11i
> ri <- complex(1, 1, 1)
> print(ri)
[1] 1+1i
> print(ri ^ 4)
[1] -4+0i

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

> ri <- c(complex(1, 2, 3), complex(1, 4, 5))
> print(ri)
[1] 2+3i 4+5i
> class(ri)
[1] "complex"
> Re(ri)
[1] 2 4
> Im(ri)
[1] 3 5
> class(Re(ri))
[1] "numeric"
> class(Im(ri))
[1] "numeric"
> Re(ri) + Im(ri)
[1] 5 9

2022年5月 6日 (金)

[R]代数方程式の根を求める

polyroot関数を使う。以下は2x3+3x2+8x-5=0の3つの根(0.5,-1+2i,-1-2i)を求めた例。虚部も求めることができる。引数には、次数の低いほうから係数をベクトルでまとめて与える(この場合はc(-5,8,3,2)とする)。

> polyroot(c(-5, 8, 3, 2))
[1] 0.5+0i -1.0+2i -1.0-2i

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

> ri <- polyroot(c(-5, 8, 3, 2))
> class(ri)
[1] "complex"
> Re(ri)
[1] 0.5 -1.0 -1.0
> Im(ri)
[1] 3.372483e-16 2.000000e+00 -2.000000e+00
> class(Re(ri))
[1] "numeric"
> class(Im(ri))
[1] "numeric"
無料ブログはココログ