2026年5月12日 (火)

[R]tibbleに新しい行を追加する

add_row関数を使う。.afterオプション(.beforeオプションもある)を使うと任意の位置に追加することができる。値を指定しない列はNAが代入される。

> chara <- c("ルアン・メェイ", "帰忘の流離人")
> cv <- c("大西沙織", "高田憂希")
> tib <- tibble(chara, cv)
> tib |> as.data.frame()
chara cv
1 ルアン・メェイ 大西沙織
2 帰忘の流離人 高田憂希
> tib <- tib |> add_row(chara = "キャストリス", cv = "斎藤千和")
> tib |> as.data.frame()
chara cv
1 ルアン・メェイ 大西沙織
2 帰忘の流離人 高田憂希
3 キャストリス 斎藤千和
> tib <- tib |> add_row(chara = "ホタル", cv = "楠木ともり", .after = 2)
> tib |> as.data.frame()
chara cv
1 ルアン・メェイ 大西沙織
2 帰忘の流離人 高田憂希
3 ホタル 楠木ともり
4 キャストリス 斎藤千和
> tib <- tib |> add_row(chara = "アグライア")
> tib |> as.data.frame()
chara cv
1 ルアン・メェイ 大西沙織
2 帰忘の流離人 高田憂希
3 ホタル 楠木ともり
4 キャストリス 斎藤千和
5 アグライア <NA>

2026年5月10日 (日)

[R]ベクトルの末尾部分の要素を取り出す

tail関数を使う。末尾から取り出したい要素の個数を指定する。個数に負数を指定すると「先頭から○個の取り除いた末尾部分」という指定になる。デフォルトで個数は6が割り当てられており、コマンドラインでさっと中身を確認したいときなどに利用すると便利。

> ss <- c("帰忘の流離人", "キャストリス", "ホタル", "ルアン・メェイ")
> tail(ss, 2)
[1] "ホタル" "ルアン・メェイ"
> ss |> tail(3)
[1] "キャストリス" "ホタル" "ルアン・メェイ"
> ss |> tail(-1)
[1] "キャストリス" "ホタル" "ルアン・メェイ"
> ss |> tail(-2)
[1] "ホタル" "ルアン・メェイ"
> n <- 2 ^ (1:16)
> n |> tail()
[1] 2048 4096 8192 16384 32768 65536

2026年5月 9日 (土)

[R]ベクトルの重複する要素を取り出す(取り除く)

duplicated関数は、ベクトルを与えると重複する要素についてTRUEを返す。インデックスの少ないほうから調べて、最初に含まれる要素はFALSEを返し、それ以降登場した要素についてはTRUEを返す。これをベクトルのインデックスに指定すれば、その重複する要素を取り出せる(取り除ける)。which関数を組み合わせるとそのインデックスを得ることができる。インデックスの多いほうから判定するにはfromLastにTRUEを指定する。

> x <- c(20, 40, 10, 20, 30, 40, 40, 50, 60)
> x
[1] 20 40 10 20 30 40 40 50 60
> duplicated(x)
[1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE
> x[duplicated(x)]
[1] 20 40 40
> x[!duplicated(x)]
[1] 20 40 10 30 50 60
> which(duplicated(x))
[1] 4 6 7
> which(!duplicated(x))
[1] 1 2 3 5 8 9
> data.frame(x, duplicated(x))
x duplicated.x.
1 20 FALSE
2 40 FALSE
3 10 FALSE
4 20 TRUE
5 30 FALSE
6 40 TRUE
7 40 TRUE
8 50 FALSE
9 60 FALSE
> data.frame(x, duplicated(x, fromLast = TRUE))
x duplicated.x..fromLast...TRUE.
1 20 TRUE
2 40 TRUE
3 10 FALSE
4 20 FALSE
5 30 FALSE
6 40 TRUE
7 40 FALSE
8 50 FALSE
9 60 FALSE

重複が生じている要素すべてを取り出す(すべて取り除く)には、%in%演算子とduplicated関数と[ ]を組み合わせることで実現できる。

> x
[1] 20 40 10 20 30 40 40 50 60
> x[x %in% x[duplicated(x)]]
[1] 20 40 20 40 40
> which(x %in% x[duplicated(x)])
[1] 1 2 4 6 7
> x[!(x %in% x[duplicated(x)])]
[1] 10 30 50 60
> which(!(x %in% x[duplicated(x)]))
[1] 3 5 8 9

2026年5月 8日 (金)

[R]ベクトルの先頭部分の要素を取り出す

head関数を使う。先頭から取り出したい要素の個数を指定する。個数に負数を指定すると「末尾から○個取り除いた先頭部分」という指定になる。デフォルトで個数は6が割り当てられており、コマンドラインでさっと中身を確認したいときなどに利用すると便利。

> ss <- c("帰忘の流離人", "キャストリス", "ホタル", "ルアン・メェイ")
> head(ss, 2)
[1] "帰忘の流離人" "キャストリス"
> ss |> head(3)
[1] "帰忘の流離人" "キャストリス" "ホタル"
> ss |> head(-1)
[1] "帰忘の流離人" "キャストリス" "ホタル"
> ss |> head(-2)
[1] "帰忘の流離人" "キャストリス"
> n <- 2 ^ (1:16)
> n |> head()
[1] 2 4 8 16 32 64

2026年5月 6日 (水)

[R]ベクトルが宣言されているかどうか調べる

Rではベクトルに限らずオブジェクトの宣言は必須ではなく、明示的に宣言をせずとも、初めて値が代入されたタイミングで暗黙的にベクトルが宣言(=その値を保存するための領域がメモリ上に確保)される。

宣言されているかどうかを調べるには、is.element関数とls関数を組み合わせて使えばよい。この方法ではオブジェクトが宣言されているかどうかの判定しかできないため、それがベクトルなのか他の何かなのかはis.~関数を利用することになる。以下は起動直後のRで試した例。

> ls()
character(0)
> sakuhin <- c("崩壊:スターレイル", "崩壊:スターレイル", "魔女の旅々")
> chara <- c("ルアン・メェイ", "帰忘の流離人", "イレイナ")
> cv <- c("大西沙織", "高田憂希", "本渡楓")
> dtf <- data.frame(sakuhin = sakuhin, chara = chara, cv = cv)
> ls()
[1] "chara" "cv" "dtf" "sakuhin"
> is.element("cv", ls())
[1] TRUE
> is.element("seiyu", ls())
[1] FALSE
> is.element("dtf", ls())
[1] TRUE
> is.vector(cv)
[1] TRUE
> is.vector(seiyu)
エラー: オブジェクト 'seiyu' がありません
> is.vector(dtf)
[1] FALSE

2026年4月29日 (水)

[R]数値を文字列に変換する

formatC関数を使うと、単純な変換から、戻り値の文字列の長さ、ゼロ埋め、左右詰めなどの指定をして簡単に変換することができる。

> n <- seq(-12, 12, by = 3)
> n
[1] -12 -9 -6 -3 0 3 6 9 12
> formatC(n) # とりあえず最小限の表記の文字列にする
[1] "-12" "-9" "-6" "-3" "0" "3" "6" "9" "12"
> formatC(n, width = 5) # 右詰で長さが5の文字列にする
[1] " -12" " -9" " -6" " -3" " 0" " 3" " 6" " 9" " 12"
> formatC(n, width = 5, flag = "0") # 右詰長さ5の文字列にして隙間は0で埋める
[1] "-0012" "-0009" "-0006" "-0003" "00000" "00003" "00006" "00009" "00012"
> formatC(n, width = 5, flag = "-") # 左詰で長さが5の文字列にする
[1] "-12 " "-9 " "-6 " "-3 " "0 " "3 " "6 " "9 " "12 "

2026年4月28日 (火)

[R]マララ・ユスフザイの国連本部での演説(2013年7月12日)の文章(原文)を得る

この演説は公式ページで全文公開されており、このページをダウンロードして加工することで、テキスト形式で全文を手に入れることができる。以下のスクリプトを実行すると、その全文が含まれたテキストファイルmalalaun_en.txtがカレントディレクトリに作成される。

> library(rvest)
> s <- "https://malala.org/news-and-voices/malala-un-speech"
> html <- read_html(s)
> lns <- html |> html_elements("p") |> html_text()
> idx <- grep("(Bismillah|Education first\\.)", lns)
> lns <- lns[idx[1]:idx[2]]
> write(lns, "malalaun_en.txt")

R_malalaun_en

2026年4月27日 (月)

[Julia]パッケージマネージャーを起動する

REPL(対話型実行環境)で]を押す。

julia>

押すとパッケージマネージャーが起動して、コマンドラインのプロンプトが切り替わる(起動している環境によって数字部分は変わる)。

(@v1.12) pkg>

REPLに戻るには、カーソルが入力行の先頭にある状態でBackSpaceを押すかCtrl+Hを押す。プロンプトが元に戻るはず。Ctrl+Cを押すとカーソルがどの位置にあっても戻る。

julia>

2026年4月26日 (日)

[Julia]コマンドプロンプトやPowerShellでREPL(対話型実行環境)を起動する

Juliaの実行ファイルが格納されているディレクトリにパスが通してあることを確認する。例えばバージョン1.12.3であれば、以下のディレクトリがそれ(○○はユーザー名)。

C:\Users\○○\AppData\Local\Programs\Julia-1.12.3\bin

「julia」と入力してEnterキーを押す。

>julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.12.3 (2025-12-15)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org release
|__/ |
julia>

終了するには「exit()」と入力してEnterキーを押す。

julia> exit()

2026年4月24日 (金)

[R]マララ・ユスフザイの国連本部での演説(2013年7月12日)の文章(日本語訳)を得る

この演説は英語で行われているがその日本語訳は公式ページで全文公開されており、このページをダウンロードして加工することで、テキスト形式で日本語訳全文を手に入れることができる。以下のスクリプトを実行すると、その日本語訳全文が含まれたテキストファイルmalalaun_jp.txtがカレントディレクトリに作成される。

> library(rvest)
> s <- "https://www.unic.or.jp/news_press/features_backgrounders/4790/"
> html <- read_html(s)
> lns <- html |> html_elements("p") |> html_text()
> idx <- grep("(2013年07月12日|* *** *)", lns)
> lns <- lns[(idx[1] + 1):(idx[2] - 1)]
> write(lns, "malalaun_jp.txt")

R_malalaun_jp

«[gfortran]エラーメッセージ「libgfortran-5.dllが見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。」

無料ブログはココログ

■■

■■■