R(その他)

2022年12月 8日 (木)

[R]ロケールの確認と設定

ロケールの確認はSys.getlocale関数を使う。

ウィンドウズ版は4.1.3までは、デフォルトのロケールは「Japanese_Japan.932」。

> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"

4.2.0以降は「Japanese_Japan.utf8」になった。

> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8"

そのため、例えばこれまでファイルを読み込む際にエンコードを指定しなかった場合、スクリプトが動作しない可能性がある。

2022年12月 7日 (水)

[R]パッケージを簡単にインストールする

install.packages関数を使うとパッケージをインストールすることができるが、デフォルトでは、CRANのミラーを選択するダイアログが表示される。

> install.packages("colorspace")
パッケージを ‘C:/Users/○○/Documents/R/win-library/4.1’ 中にインストールします
(‘lib’ が指定されていないため)
--- このセッションで使うために、CRAN のミラーサイトを選んでください ---

ダイアログが表示されずにそのままインストールする方法がある。options関数のreposオプションに、あらかじめCRANのミラーサイトを登録しておけばよい。

> options(repos = "https://cran.ism.ac.jp/")
> install.packages("colorspace")
パッケージを ‘C:/Users/○○/Documents/R/win-library/4.1’ 中にインストールします
(‘lib’ が指定されていないため)
URL 'https://cran.ism.ac.jp/bin/windows/contrib/4.1/colorspace_2.0-3.zip' を試しています
Content type 'application/zip' length 2651058 bytes (2.5 MB)
downloaded 2.5 MB
package ‘colorspace’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\○○

reposオプションに、有効なミラーサイトを登録しないと、エラーが発生する。

> options(repos = "https://www.ism.ac.jp/")
> install.packages("colorspace")
パッケージを ‘C:/Users/○○/Documents/R/win-library/4.1’ 中にインストールします
(‘lib’ が指定されていないため)
警告: unable to access index for repository https://www.ism.ac.jp/src/contrib:
URL 'https://www.ism.ac.jp/src/contrib/PACKAGES' を開けません

このreposオプションによる設定を無効にするには、Rを再起動する。

2022年12月 1日 (木)

[R]バージョン4.2以降の環境でシフトJISのファイルを扱う

Windows版Rのバージョン4.2以降はデフォルトの文字コードがUTF-8になり、初期状態でシフトJISのファイルは扱えなくなった。例えば、以下のようなスクリプトをjhello.Rと保存する。

cat("こんにちは、世界。\n")

実行してみる。

> source("jhello.R")
source("jhello.R") でエラー:
構文解析中に不正なマルチバイト文字列がありました (1 行)

なお、文字コードを指定すれば問題なく実行できる。

> source("jhello.R", encoding = "932")
こんにちは、世界。

その都度encodingオプションを指定するのは煩わしく、デフォルトの状態でシフトJISを使えるようにするには、Sys.setlocale関数でその環境のロケールを変更すればよい。以下のとおりに実行する。

> Sys.setlocale(locale = "Japanese_Japan.932")
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"
警告メッセージ:
Sys.setlocale(locale = "Japanese_Japan.932") で:
using locale code page other than 65001 ("UTF-8") may cause problems

最初の1回目には、UTF-8以外を使うことは問題発生の原因となるだろうと警告されるが、これで文字コードはUTF-8になった。

> Sys.setlocale(locale = "Japanese_Japan.932")
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"
警告メッセージ:
Sys.setlocale(locale = "Japanese_Japan.932") で:
using locale code page other than 65001 ("UTF-8") may cause problems
> source("jhello.R")
こんにちは、世界。

このロケールの設定はRを再起動すると元に戻ってしまう(デフォルトの文字のエンコードがUTF-8になる)。これを起動時に自動的にシフトJISにするには、R起動時のカレントディレクトリ(ダブルクリックした.RDataファイルが置かれたフォルダー)に置かれたテキストファイル.RProfileに(無ければ新規作成)、以下の1行を加える。

Sys.setlocale(locale = "Japanese_Japan.932")

上記同様に、R起動時に警告メッセージが表示されるが、ただのメッセージであり、害はない。

2022年8月19日 (金)

[R]Windows版Rにおけるウィンドウの大きさなどの設定方法

ファイル「Rconsole」をテキストエディターで修正する。

当該ファイルはインストール直後はC:\Program Files\R\R-4.2.1\etc(バージョン4.2.1の場合)だけに置かれている。このフォルダーに置かれたRconsoleは、そのサーバーを利用する全てのアカウント向けの設定ファイルのため、このファイルを修正することは推奨しない。

このC:\Program Files\R\R-4.2.1\etc\Rconsoleをサインインしているアカウント専用のドキュメントフォルダーにコピーする。

C:\Users\○○\Documents
※○○はアカウント名

このフォルダーにファイル「Rconsole」がある場合は、こちらの内容が優先的に採用されるため、そのアカウントで設定したい内容(フォントウィンドウの位置など)があれば、メニュー「編集」→「GUIプリファレンス」で「Rgui設定エディター」ダイアログを表示させ、設定をした後に下部の「Save...」ボタンをクリックし、上記フォルダーを選択してそこにRconsoleを保存する。

ファイル「Rconsole」はテキストファイルのため、後でそのファイルをテキストエディターで直接修正しても、修正は反映される(Rを要再起動)。

2022年7月 5日 (火)

[R]CRANを指定する

パッケージをインストールする際に、install.packages関数を使用すると、どのCRANを使うかダイアログで選択する状態になるが、そうではなく、あらかじめCRANを指定しておく方法。以下はhttps://cran.ism.ac.jp/をパッケージのダウンロード元としてあらかじめ設定した例。

> options(repos = "https://cran.ism.ac.jp/")
> install.packages("rgl")
パッケージを ‘C:/Users/○○○/Documents/R/win-library/4.1’ 中にインストールします
(‘lib’ が指定されていないため)
URL 'https://cran.ism.ac.jp/bin/windows/contrib/4.1/rgl_0.109.2.zip' を試しています
(以下表示省略)

CRANではないURLを指定すると、当然パッケージはインストールされずにエラーメッセージが表示される。

> options(repos = "https://cran.reporepo.ac.jp/")
> install.packages("rgl")
パッケージを ‘C:/Users/○○○/Documents/R/win-library/4.1’ 中にインストールします
(‘lib’ が指定されていないため)
警告: unable to access index for repository https://cran.reporepo.ac.jp/src/contrib:
URL 'https://cran.reporepo.ac.jp/src/contrib/PACKAGES' を開けません
(以下表示省略)

2022年6月20日 (月)

[R]tibbleを使う

tidyverseパッケージに含まれているため、このパッケージの使用を宣言すればよい。tibbleとはデータフレームを使いやすくしたようなもので、データフレームとほぼ同じように扱うことができる。

> library(tidyverse)
> n <- 1:3
> s <- c("A", "B", "C")
> d <- c(1.5, 2.5, 3.6)
> tbl <- tibble(n, s, d)
> tbl
# A tibble: 3 x 3
n s d
1 1 A 1.5
2 2 B 2.5
3 3 C 3.6
> tbl <- as_tibble(data.frame(n, s, d))
> tbl
# A tibble: 3 x 3
n s d
1 1 A 1.5
2 2 B 2.5
3 3 C 3.6
> tbl[2, 3]
# A tibble: 1 x 1
d
1 2.5
> tbl[1, ]
# A tibble: 1 x 3
n s d
1 1 A 1.5
> tbl[, 2]
# A tibble: 3 x 1
s
1 A
2 B
3 C

2022年6月15日 (水)

[R]インストールしているパッケージを一括でアップデートする。

update.packages関数を使う。アップデートできるパッケージがある場合は、パッケージ1つごとに、アップデートするか否かの確認のダイアログが表示される。

> update.packages()

その環境で使用中(library関数で使用を宣言しているパッケージ)のパッケージはアップデートされないので注意。

2022年6月14日 (火)

[R]最新版のパッケージがあるか否かを確認する

old.packages関数を使う。アップデートできるパッケージがある場合は、それらが表示される。

> old.packages()

ここではバージョン番号を比較して表示しているだけであり、パッケージや環境によっては、あえてアップデートされない場合があるので注意。

あくまで表示されるだけで、実際にアップデートをする場合はupdate.packages関数を使う。

2022年6月13日 (月)

[R]旧エクセルのファイル(.xls)を読み込む

readxlパッケージのread_xls関数を使う。readxlパッケージはその関数利用時にR以外のソフトウェアを必要としないため、パッケージをインストールすれば、そのまま使うことができる。よくネットで見かけるopenxlsxパッケージはxlsを扱うことはできない。

この関数の戻り値はtibble型。data.frame型とほぼ同じように扱うことができる。

以下のようなxlsファイルがあり、カレントディレクトリにsample.xlsというファイル名で保存した状態での動作例。オプションで特に指定をしなければ1行目をフィールド名として採用する。データが1行目から始まる場合はcol_namesオプションにFALSEを指定する。読み込ませる列(A~IV)を指定する場合はrangeにcell_colsを使用して指定する。各フィールドのデータ型は未指定では自動的にデータ型の類推(guess)がなされて決まるが、これを指定の型にしたい場合はcol_typesオプションに、ベクトルで順番に指定をする。

Xls

> library(readxl)
> tbl <- read_xls("sample.xls")
> tbl
# A tibble: 4 x 4
no name date age
1 1 A 2022-01-01 00:00:00 10
2 2 B 2022-02-02 00:00:00 20
3 3 C 2022-03-03 00:00:00 30
4 4 D 2022-05-05 00:00:00 40
> tbl <- read_xls("sample.xls", col_names = FALSE)
New names:
* `` -> `...1`
* `` -> `...2`
* `` -> `...3`
* `` -> `...4`
> tbl
# A tibble: 5 x 4
...1 ...2 ...3 ...4
1 no name date age
2 1 A 44562 10
3 2 B 44594 20
4 3 C 44623 30
5 4 D 44686 40
> tbl <- read_xls("sample.xls", range = cell_cols("B:D"))
> tbl
# A tibble: 4 x 3
name date age
1 A 2022-01-01 00:00:00 10
2 B 2022-02-02 00:00:00 20
3 C 2022-03-03 00:00:00 30
4 D 2022-05-05 00:00:00 40
> tbl <- read_xls("sample.xls", col_types = c("guess", "text", "text", "numeric"))
> tbl
# A tibble: 4 x 4
no name date age
1 1 A 44562 10
2 2 B 44594 20
3 3 C 44623 30
4 4 D 44686 40
> tbl <- read_xls("sample.xls", col_types = c("guess", "text", "date", "numeric"))
> tbl
# A tibble: 4 x 4
no name date age
1 1 A 2022-01-01 00:00:00 10
2 2 B 2022-02-02 00:00:00 20
3 3 C 2022-03-03 00:00:00 30
4 4 D 2022-05-05 00:00:00 40

2022年3月12日 (土)

[R]Excelの日付データをRの日付データに変換する

openxlsxパッケージなどを使ってExcelのファイルの日付データを読み込んだとき、日付データではなく数値データで読み込まれるときがある。これを読み込み元の日付相当の日付データに戻す場合は、as.Date関数にoriginオプションを付けて変換する。

Sheet1に以下のように入力したエクセルのファイルdata.xlsxを用意して試す。

Exceldate

> library(openxlsx)
> dtf <- read.xlsx("data.xlsx", colName = FALSE)
> dtf
X1 X2
1 44562 ← 書式を「日付」
2 44562 ← 書式を「標準」
> mode(dtf$X1)
[1] "numeric"
> class(dtf$X1)
[1] "numeric"
> as.Date(dtf$X1, origin = "1899-12-30")
[1] "2022-01-01" "2022-01-01"

Excelの日付データは、内部では一連の連番で保存しており、Windows版は1900年1月1日を1とした連番で管理している。1900年1月2日は翌日のため2となり、1901年1月1日は366日後に当たるため367となる(1900年はうるう年)。つまり、値として基準になる日は1899年12月31日である。一方、as.Date関数では以下のとおりにoriginオプションに指定した日を基準としている。

> as.Date(0, origin = "1900-01-01")
[1] "1900-01-01"

そのため、読み取った値をas.Date関数で変換するときは、originオプションに1899年12月30日を指定すること。

無料ブログはココログ