R入門
環境
最終更新:
r-intro
目次
日付時刻とタイムゾーン
現在の環境の日付とタイムゾーンを得る
日付を得るにはSys.time関数を、タイムゾーンを得るにはSys.timezone関数を使う。なお、Sys.time関数の戻り値のクラスはPOSIXct、Sys.timezoneは文字列である。
> Sys.time()
[1] "2014-11-29 20:55:53 JST"
> class(Sys.time())
[1] "POSIXct" "POSIXt"
> Sys.timezone()
[1] "Asia/Tokyo"
> class(Sys.timezone())
[1] "character"現在の環境のタイムゾーンを得る
Sys.timezone関数を使う。以下は、Windowsの日本語版バージョン4.3.1で実行した例。
> Sys.timezone()
[1] "Asia/Tokyo"タイムゾーンIDを一覧形式で得る
その環境下に搭載されているタイムゾーンを識別するID(タイムゾーンID)を一覧形式で得るには、OlsonNames関数を使う。
> OlsonNames()
[1] "Africa/Abidjan" "Africa/Accra"
[3] "Africa/Addis_Ababa" "Africa/Algiers"
[5] "Africa/Asmara" "Africa/Asmera"
(以下、表示省略)
> grep("Tokyo", OlsonNames())
[1] 322
> grep("Tokyo", OlsonNames(), value = TRUE)
[1] "Asia/Tokyo"ロケール
ロケールの確認と設定
ロケールの確認は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"そのため、例えばこれまでファイルを読み込む際にエンコードを指定しなかった場合、スクリプトが動作しない可能性がある。
その他
Windows版RでShift_JISを使う
Windows版は、バージョン4.1.3まではデフォルトで扱う日本語の文字コードはShift_JISだったが、次の4.2.0からはUTF-8になった。これをShift_JISにする場合はSys.setlocale関数に「Japanese_Japan.932」を指定して実行すればよい。漢字「石」はUTF-8による文字コードは0xe79fb3、Shift_JISは0x90ceであるので、文字コードが切り替わったことがわかる。
> R.Version()$platform
[1] "x86_64-w64-mingw32"
> R.Version()$version.string
[1] "R version 4.4.1 (2024-06-14 ucrt)"
> 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"
> localeToCharset()
[1] "UTF-8"
> ra <- charToRaw("石見舞菜香")
> print(ra)
[1] e7 9f b3 e8 a6 8b e8 88 9e e8 8f 9c e9 a6 99
> 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
> localeToCharset()
[1] "CP932"
> ra <- charToRaw("石見舞菜香")
> print(ra)
[1] 90 ce 8c a9 95 91 8d d8 8d 81コマンドの実行に要した時間を計測する
system.timeの引数にコマンドを与えて実行すると、そのコマンドを実行しつつ実行に要した時間を計測して返す。以下は、それぞれ100次、1000次、2000次の正方行列の逆行列を求めた際に要した時間を計測した例。「経過」に表示されている時間が、実際に要した時間(単位:秒)。この関数の戻り値はproc_time型。
> n <- 100; mx <- matrix(rnorm(n * n), n, n)
> dim(mx)
[1] 100 100
> system.time(mxi <- solve(mx))
ユーザ システム 経過
0 0 0
> n <- 1000; mx <- matrix(rnorm(n * n), n, n)
> dim(mx)
[1] 1000 1000
> system.time(mxi <- solve(mx))
ユーザ システム 経過
0.58 0.00 0.59
> n <- 2000; mx <- matrix(rnorm(n * n), n, n)
> dim(mx)
[1] 2000 2000
> system.time(mxi <- solve(mx))
ユーザ システム 経過
5.45 0.01 5.50
> r <- system.time(mxi <- solve(mx))
> length(r)
[1] 5
> class(r)
[1] "proc_time"
> str(r)
'proc_time' Named num [1:5] 5.79 0.03 5.84 NA NA
- attr(*, "names")= chr [1:5] "user.self" "sys.self" "elapsed" "user.child" ...
> print(r)
ユーザ システム 経過
5.79 0.03 5.84