« 2025年9月 | トップページ | 2025年11月 »

2025年10月29日 (水)

[R]計算機イプシロンを求める

計算機イプシロンとは、不等式「1 + epsm > 1」が成り立つ最小の正数epsmのこと。これを手計算で求めてみる。

> epsm <- 1.0
> while (1.0 + epsm > 1.0) {
+ epsm <- epsm / 2.0
+ }
> epsm <- epsm * 2.0
> print(epsm)
[1] 2.220446e-16

この環境下では、約2.2×10-16であることがわかる。なお、Rにはあらかじめ稼働環境の計算能力の値を格納したリスト.Machineがグローバル変数として定義されており、これに含まれるdouble.epsが計算機イプシロンである。

> .Machine$double.eps
[1] 2.220446e-16

手計算の計算結果と矛盾がないことがわかる。

2025年10月24日 (金)

[R]行列のスカラー倍を求める

*演算子を使う。それぞれスカラー(数や関数のこと)と行列を指定する。

> a <- 3
> mxxx <- matrix(c(1, 2, 2, 2, 3, 5, 3, 4, 6), nrow = 3, ncol = 3)
> a
[1] 3
> mxxx
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 3 4
[3,] 2 5 6
> a * mxxx
[,1] [,2] [,3]
[1,] 3 6 9
[2,] 6 9 12
[3,] 6 15 18

2025年10月23日 (木)

[R]行列の和と差を求める

+演算子または-演算子を使う。行列の和と差の定義(行の数と列の数が同じ行列同士の各成分を足す、引く)から、二つの行列の行数と列数が一致しない場合はエラーが発生する。

> mxaa1 <- matrix(c(1, 6, 2, 4, 3, 2), nrow = 2, ncol = 3)
> mxbb1 <- matrix(c(1, 2, 1, 3, 0, 8), nrow = 2, ncol = 3)
> mxaa1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 6 4 2
> mxbb1
[,1] [,2] [,3]
[1,] 1 1 0
[2,] 2 3 8
> mxaa1 + mxbb1
[,1] [,2] [,3]
[1,] 2 3 3
[2,] 8 7 10
> mxaa2 <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
> mxbb2 <- matrix(c(7, 5, 9, 1), nrow = 2, ncol = 2)
> mxaa2
[,1] [,2]
[1,] 1 3
[2,] 2 4
> mxbb2
[,1] [,2]
[1,] 7 9
[2,] 5 1
> mxaa2 - mxbb2
[,1] [,2]
[1,] -6 -6
[2,] -3 3
> mxaa1 + mxbb2
mxaa1 + mxbb2 でエラー: 適切な配列ではありません
> mxaa1 - mxbb2
mxaa1 - mxbb2 でエラー: 適切な配列ではありません

2025年10月21日 (火)

[R]行列を作る

matrix関数を使う。以下のように引数を指定する

matrix(成分を含むベクトル, 行数, 列数)

行数と列数はnrowオプションとncolオプションで明示的に指定することができる。また、指定したベクトルの要素数に応じて、行または列数だけの指定でもう一方が決まる場合は、指定を省略できる。

> matrix(1:6, 2, 3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:6, nrow = 2, ncol = 3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:6, ncol = 3, nrow = 2)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:6, nrow = 3, ncol = 2)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> matrix(1:6, ncol = 2)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

指定したベクトルの要素数と行数や列数が揃わない場合は、エラーが発生する。

> matrix(1:8, nrow = 2, ncol = 2)
[,1] [,2]
[1,] 1 3
[2,] 2 4
警告メッセージ:
matrix(1:8, nrow = 2, ncol = 2) で:
data length differs from size of matrix: [8 != 2 x 2]
> matrix(1:8, nrow = 3)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 1
警告メッセージ:
matrix(1:8, nrow = 3) で:
data length [8] is not a sub-multiple or multiple of the number of rows [3]

matrix関数は指定したベクトルの要素を、行列の一列目の成分から順番に埋めようとする。これを一行目の成分から埋めるようにするには、byrowオプションにTRUEを指定する。

> matrix(1:6, nrow = 2, ncol = 3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6

2025年10月19日 (日)

[R]tibbleから指定した一列を取り出してベクトルにする

$演算子か[[ ]]演算子を使う。戻り値はベクトルになる。

> n <- c(11, 22, 33, 44)
> name <- c("イレイナ", "カナメ", "セナディア", "リフ")
> seiyu <- c("本渡楓", "安野希世乃", "鈴木みのり", "瀬戸麻沙美")
> tib <- tibble(n, name, seiyu)
> tib |> as.data.frame()
n name seiyu
1 11 イレイナ 本渡楓
2 22 カナメ 安野希世乃
3 33 セナディア 鈴木みのり
4 44 リフ 瀬戸麻沙美
> tib$seiyu
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"
> tib[["seiyu"]]
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"
> tib[[3]]
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"
> tib |> pull(seiyu)
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"

2025年10月17日 (金)

[R]ウェブサイトのページの表の中身を読み取る

rvectパッケージのhtml_table関数を使う。あらかじめread_html関数でページを読み取っておくこと。以下は、宮内庁の公式ウェブサイトの天皇皇后両陛下の紹介ページを2025年9月に抜き出した例。ページ内に表は四つあり、一つ目と二つ目の中身をそれぞれ表示している。ページから表は一括でしか読み取れないが、その際、表にヘッダ行がある場合は、headerオプションにTRUEを指定すること。

> library(rvest)
> html <- read_html("https://www.kunaicho.go.jp/about/history/history02.html")
> tbl <- html |> html_table(header = FALSE)
> length(tbl)
[1] 4
> mode(tbl)
[1] "list"
> tbl[[1]] |> as.data.frame() |> head(8)
X1 X2
1 お名前 徳仁(なるひと)
2 お続柄 上皇第1皇男子
3 お誕生日 昭和35年2月23日
4 ご称号 浩宮(ひろのみや)
5 お印 梓(あずさ)
6 成年式 昭和55年2月23日(ご年齢20歳)
7 立太子の礼 平成3年2月23日
8 ご即位 令和元年5月1日
> tbl[[2]] |> as.data.frame() |> head(5)
X1 X2
1 お名前 雅子(まさこ)
2 お続柄 小和田恆(おわだひさし)氏第1女子
3 お誕生日 昭和38年12月9日
4 お印 ハマナス
5 総裁職など 日本赤十字社 名誉総裁

2025年10月14日 (火)

[R]tibbleを指定した列だけのtibbleに変換する

[ ]演算子を使う。取り出したい列を数値型ベクトルか文字列型ベクトルで指定する。行を指定する箇所は空欄にする。負数を指定すると、その列を取り除くという指定になる。最後の例のとおり、データフレームとは異なり、変換後に一列だけになってもtibbleを返すことに注意(データフレームの場合はベクトルに変わる)。以下では簡潔な表示にするため、データフレームに変換して表示している。

> library(tidyverse)
> n <- c(11, 22, 33, 44)
> name <- c("イレイナ", "カナメ", "セナディア", "リフ")
> seiyu <- c("本渡楓", "安野希世乃", "鈴木みのり", "瀬戸麻沙美")
> tib <- tibble(n, name, seiyu)
> tib |> as.data.frame()
n name seiyu
1 11 イレイナ 本渡楓
2 22 カナメ 安野希世乃
3 33 セナディア 鈴木みのり
4 44 リフ 瀬戸麻沙美
> tib[, 2:3] |> as.data.frame()
name seiyu
1 イレイナ 本渡楓
2 カナメ 安野希世乃
3 セナディア 鈴木みのり
4 リフ 瀬戸麻沙美
> tib[, -1] |> as.data.frame()
name seiyu
1 イレイナ 本渡楓
2 カナメ 安野希世乃
3 セナディア 鈴木みのり
4 リフ 瀬戸麻沙美
> tib[, c("seiyu", "name")] |> as.data.frame()
seiyu name
1 本渡楓 イレイナ
2 安野希世乃 カナメ
3 鈴木みのり セナディア
4 瀬戸麻沙美 リフ
> tib[, "seiyu"] |> as.data.frame()
seiyu
1 本渡楓
2 安野希世乃
3 鈴木みのり
4 瀬戸麻沙美

2025年10月13日 (月)

[R]tibbleを指定した行だけのtibbleに変換する

[ ]演算子を使う。取り出したい行を数値型ベクトルで指定する。列を指定する箇所は空欄にする。負数を指定すると、その行を取り除くという指定になる。以下の例では、簡潔な表示にするためにデータフレームに変換して表示している。

> library(tidyverse)
> n <- c(11, 22, 33, 44)
> name <- c("イレイナ", "カナメ", "セナディア", "リフ")
> seiyu <- c("本渡楓", "安野希世乃", "鈴木みのり", "瀬戸麻沙美")
> tib <- tibble(n, name, seiyu)
> tib |> as.data.frame()
n name seiyu
1 11 イレイナ 本渡楓
2 22 カナメ 安野希世乃
3 33 セナディア 鈴木みのり
4 44 リフ 瀬戸麻沙美
> tib[c(2, 4), ] |> as.data.frame()
n name seiyu
1 22 カナメ 安野希世乃
2 44 リフ 瀬戸麻沙美
> tib[c(-3), ] |> as.data.frame()
n name seiyu
1 11 イレイナ 本渡楓
2 22 カナメ 安野希世乃
3 44 リフ 瀬戸麻沙美

2025年10月10日 (金)

[R]データフレームから指定した一列を取り出す

$演算子か[[ ]]演算子を使う。戻り値はベクトルになる。

> n <- c(11, 22, 33, 44)
> name <- c("イレイナ", "カナメ", "セナディア", "リフ")
> seiyu <- c("本渡楓", "安野希世乃", "鈴木みのり", "瀬戸麻沙美")
> dtf <- data.frame(n, name, seiyu)
> dtf
n name seiyu
1 11 イレイナ 本渡楓
2 22 カナメ 安野希世乃
3 33 セナディア 鈴木みのり
4 44 リフ 瀬戸麻沙美
> dtf$seiyu
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"
> dtf[["seiyu"]]
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"
> dtf[[3]]
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"

2025年10月 9日 (木)

[R]データフレームを指定した列だけのデータフレームに変換する

[ ]演算子を使う。取り出したい列を数値型ベクトルか文字列型ベクトルで指定する。行を指定する箇所は空欄にする。負数を指定すると、その列を取り除くという指定になる。最後の例のとおり、変換後に一列だけのデータフレームになる場合は、その戻り値はベクトルになることに注意。

> n <- c(11, 22, 33, 44)
> name <- c("イレイナ", "カナメ", "セナディア", "リフ")
> seiyu <- c("本渡楓", "安野希世乃", "鈴木みのり", "瀬戸麻沙美")
> dtf <- data.frame(n, name, seiyu)
> print(dtf)
n name seiyu
1 11 イレイナ 本渡楓
2 22 カナメ 安野希世乃
3 33 セナディア 鈴木みのり
4 44 リフ 瀬戸麻沙美
> dtf[, 2:3]
name seiyu
1 イレイナ 本渡楓
2 カナメ 安野希世乃
3 セナディア 鈴木みのり
4 リフ 瀬戸麻沙美
> dtf[, -1]
name seiyu
1 イレイナ 本渡楓
2 カナメ 安野希世乃
3 セナディア 鈴木みのり
4 リフ 瀬戸麻沙美
> dtf[, c("seiyu", "name")]
seiyu name
1 本渡楓 イレイナ
2 安野希世乃 カナメ
3 鈴木みのり セナディア
4 瀬戸麻沙美 リフ
> dtf[, 3]
[1] "本渡楓" "安野希世乃" "鈴木みのり" "瀬戸麻沙美"

« 2025年9月 | トップページ | 2025年11月 »

無料ブログはココログ

■■

■■■