R入門
その他
最終更新:
r-intro
目次
-
目次
- 関数のヘルプを表示する
- 多次元配列を扱う
- 保存されているオブジェクトを確認する
- Windows版Rにおけるウィンドウの大きさなどの設定方法
- パッケージをインストールする
- インストールされているパッケージを一覧で確認する
- パッケージに含まれる関数一覧を得る
- R本体のバージョンを確認する
- インストール時に一緒にインストールされたパッケージの一覧表示
- インストールしたパッケージのバージョンを確認する。
- 新しいバージョンがあるパッケージを一覧表示する
- ZIPファイルを作成、展開する
- 簡単に地図を表示する
- パッケージを更新する
- バージョン4.2以降の環境でシフトJISのファイルを扱う
- パッケージを簡単にインストールする
- データフレームの要素をHTMLやTeXの表に変換する
- ウェブサイトの表を読み込む
- パッケージをインストールするサーバーを指定する
- ggplot2で作成した図を画像ファイルに出力する
- ファイルのハッシュ値を得る
- 例外処理を行う
- 環境変数を取得する
- 文字コードを指定してスクリプトを実行する
- R起動時に使用できる文字コードを自動的に設定する
- エラーメッセージ「invalid multibyte character in parser」
- 動作環境の設定を確認する [#r1e47d0f]
- SQL Serverのデータベースを作成する
- ベクトルやデータフレームをファイルに保存し、後で読み込んで再利用する
- ベクトルやデータフレームをファイルに保存し、後で読み込んで再利用する
- Lahmanパッケージを使う
関数のヘルプを表示する
help関数を使用する。以下は、log関数のヘルプを表示させる例。
> help(log)
代わりに?を使うこともできる。
> ?log
多次元配列を扱う
多次元配列はarray関数で作ることができる。以下は4×3×2の多次元配列(4行3列の配列が2つからなる配列)を作成した例。
> array(1:24, dim = c(4, 3, 2))
, , 1
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
, , 2
[,1] [,2] [,3]
[1,] 13 17 21
[2,] 14 18 22
[3,] 15 19 23
[4,] 16 20 24
> d <- array(1:24, dim = c(4, 3, 2))
> d[2, 3, 2]
[1] 22
保存されているオブジェクトを確認する
ls関数あるいはobjects関数は、記録されているオブジェクト(ベクトル、データフレーム、リスト、関数など)の一覧表示をすることができる。
Rの起動直後には、何も記録されていない。
> ls()
character(0)
試しに、ベクトルと関数を作って再度実行してみる。
> n <- 1:3
> f <- function(x) x ^ 2
> ls()
[1] "f" "n"
ls関数もobjects関数も、デフォルトでは名前が「.」(ピリオド)で始まるオブジェクトは表示しない。例えば、set.seed関数を実行すると.Random.seedというベクトルを作成する。このようなオブジェクトも表示するには、all.namesオプションにTRUEを指定する。
> ls(all.names = TRUE)
[1] "f" "n"
> set.seed(0)
> ls()
[1] "f" "n"
> ls(all.names = TRUE)
[1] ".Random.seed" "f" "n"
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を要再起動)。
パッケージをインストールする
install.packages関数を使う。以下は、latticeパッケージをインストールした例。
> install.packages("lattice")
パッケージを ‘C:/Users/〇〇/Documents/R/win-library/4.1’ 中にインストールします
(‘lib’ が指定されていないため)
--- このセッションで使うために、CRAN のミラーサイトを選んでください ---
上の例のように「ミラーサイトを選んでください」と表示され、以下のようなダイアログが表示されるはず。

ここでミラーサイトを選び(通常は「Japan (Tokyo) [https]」を選ぶのが無難)、クリックして「OK」ボタンを押すと、パッケージのインストールが始まる。
R起動後に、上記のダイアログでミラーサイトを選んでおくと、次にinstall.packages関数を使うと、そのミラーサイトが自動で選ばれる。つまり、ダイアログは表示されなくなる。しかし、Rを終了すると、この設定は消えてしまう。
options関数を使用してあらかじめミラーサイトを指定しておくと、install.packages関数を使ったときに、ミラーサイトを選ばずにすぐにインストールが始まるようになる。
> options(repos = "https://cran.ism.ac.jp")
> install.packages("RSQLite")
パッケージを ‘C:/Users/〇〇/Documents/R/win-library/4.1’ 中にインストールします
(‘lib’ が指定されていないため)
(以下、表示省略)
インストールされているパッケージを一覧で確認する
library関数を使う。引数に何も与えないと、インストールされているパッケージが別ウィンドウで一覧で表示される。
> library()
別ウィンドウに、例えば以下のような表示がされているはず(フォルダー名やパッケージなどは環境により異なる)。
パッケージ (ライブラリ ‘C:/Users/○○/Documents/R/win-library/3.○’ 中):
(表示省略)
ggplot2 Create Elegant Data Visualisations Using the Grammar of Graphics
(表示省略)
パッケージ (ライブラリ ‘C:/Program Files/R/R-3.○.○/library’ 中):
base The R Base Package
(表示省略)
前者のフォルダー(Users以下)は、install.packages関数で後から追加をしたパッケージが格納され、後者のフォルダー(Program files以下)には、そのRをインストールした際に、一緒にインストールされた標準的なパッケージが格納されている。
パッケージに含まれる関数一覧を得る
help関数を使う。例えば、Rでもっとも標準的なパッケージである、baseパッケージに含まれている関数一覧を得る。
> help(package = base)
別ウィンドウが表示されるかブラウザがhtmlファイルを開き、そこにこのパッケージに含まれている関数の一覧が表示されるはず。関数名をクリックすれば、その関数のヘルプのページが表される。
R本体のバージョンを確認する
R.Version関数を使う。以下、とある環境下での実行例。
> R.Version()
$platform
[1] "x86_64-w64-mingw32"
$arch
[1] "x86_64"
(以下、表示省略)
例えば、バージョン番号だけを文字列で取り出したいのであれば、以下のようにする。
> paste(R.Version()$major, R.Version()$minor, sep = ".")
[1] "4.2.1"
インストール時に一緒にインストールされたパッケージの一覧表示
library関数を使う。
> library(lib.loc = .Library)
別ウィンドウが表示され、R本体と一緒にインストールされたパッケージの一覧が表示される。
インストールしたパッケージのバージョンを確認する。
help関数を使い、そのパッケージのヘルプを表示させると、最初にそのバージョンが記載されている。以下、例。
> help(package = ggplot2)
次のような表示が上部にあるはず。このパッケージのインストールされているバージョンは3.3.0であることがわかる。
Documentation for package ‘ggplot2’ version 3.3.0
新しいバージョンがあるパッケージを一覧表示する
old.packages関数を使う。この関数を実行すると、パッケージをインストールするときと同じように、CRANのミラーサイトを選ぶ必要がある。選ぶと、以下の例のように、インストールされているパッケージのうち、指定をしたミラーサイトで、新しいバージョンが公開されているものが一覧表示される。
> old.packages()
Package LibPath Installed Built ReposVer Repository
(表示省略)
ggplot2 "ggplot2" "C:/○○○" "3.3.0" "3.6.3" "3.3.2" "○○○"
(表示省略)
この例の場合は、ggplot2パッケージは、3.3.0がインストールされているが、Rのバージョン3.6.3でビルドされた新バージョン3.3.2が公開されている、ということ。
ZIPファイルを作成、展開する
zip関数を使う。utilsパッケージに含まれているため、Rをインストール直後から使うことができる。
試しに作ってみる。以下は、C:\Windowsフォルダーにあるwin.iniとwrite.exeからpack.zipというZIPファイルを作った例。
> v <- c("C:/Windows/win.ini", "C:/Windows/write.exe")
> zip("pack.zip", v)
adding: Windows/win.ini (deflated 21%)
adding: Windows/write.exe (deflated 60%)
カレントディレクトリ(getwd関数で得られるディレクトリ)にpack.zipというZIPファイルが作成されているはず。
ZIPファイルの展開や中身の確認はunzip関数を使う。unzip関数のlistオプションにTRUEを指定すると、ファイルは展開されずに中のファイル一覧の表示だけを行う。
> unzip("pack.zip", list = TRUE)
Name Length Date
1 Windows/win.ini 92 2016-07-16 20:45:00
2 Windows/write.exe 11264 2019-12-07 06:29:00
展開するには、listオプションに何も指定をしない(デフォルトはFALSE)。上記のとおりzip関数で作成したzipファイルには、元ファイルのディレクトリが含まれてしまう。元のディレクトリを含めずにファイルを単純に展開する場合は、junkpathsオプションにTRUEを指定する。setTimesオプションにTRUEを指定すると元のファイルのタイムスタンプを保持したまま展開する。
簡単に地図を表示する
leafletパッケージを使う。
> install.packages("leaflet")
> library(leaflet)
とりあえず表示してみる。特に何も設定しなければ、ブラウザー上に地図が表示される。
> m <- leaflet() %>% addTiles()
> m

この地図は、マウスで表示範囲などを簡単に変えることができる。特に指定をしないと、表示される地図にはOpenStreetMapが使用される。この表示に使用される地図を、地理院地図の地理院タイルにするには、以下のようにする。
> m <- leaflet()
> m <- m %>% addTiles("https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png")
> m

表示範囲や大きさなどは簡単に指定することができる。以下は、北緯35.5度、東経139.7度を中心として、ズームレベル9で地理院地図を表示した例。
> m <- m %>% setView(139.7, 35.5, zoom = 9)
> m

leafletの公式ページは以下。
パッケージを更新する
update.packages関数を使う。
パッケージを更新する前に、新しいバージョンが公開されているパッケージをold.packages関数で確認してみる。
> old.packages()
パッケージを更新する。
> update.packages()
ただし、このままだとインストールするか否かをその都度聞かれるため、煩わしい。すべて強制的にアップデートするには、askオプションをFALSEにする。
> update.packages(ask = FALSE)
バージョン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")
上記同様に、警告メッセージが表示されるが、ただのメッセージであり、害はない。
パッケージを簡単にインストールする
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を再起動する。
データフレームの要素をHTMLやTeXの表に変換する
xtableパッケージを使う。以下はデータフレームの中身をそれぞれHTMLとTeXの表のファイルに出力した例。
> library(xtable)
> n <- 1:3
> name <- c("ABCD", "12345", "漢字")
> dtf <- data.frame(n, name)
> names(dtf) <- c("no", "文字")
> print(xtable(dtf), file = "test.html", include.rownames = FALSE, type = "html")
> print(xtable(dtf), file = "test.tex", include.rownames = FALSE, type = "latex")
test.html
<!-- html table generated in R 4.1.3 by xtable 1.8-4 package -->
<!-- Thu Mar 09 10:20:17 2023 -->
<table border=1>
<tr> <th> no </th> <th> 文字 </th> </tr>
<tr> <td align="right"> 1 </td> <td> ABCD </td> </tr>
<tr> <td align="right"> 2 </td> <td> 12345 </td> </tr>
<tr> <td align="right"> 3 </td> <td> 漢字 </td> </tr>
</table>
test.tex
% latex table generated in R 4.1.3 by xtable 1.8-4 package
% Thu Mar 09 10:20:18 2023
\begin{table}[ht]
\centering
\begin{tabular}{rl}
\hline
no & 文字 \\
\hline
1 & ABCD \\
2 & 12345 \\
3 & 漢字 \\
\hline
\end{tabular}
\end{table}
print関数はデフォルトで標準出力に出力する。画面表示はせずに文字列として出力する場合は、以下のようにprint.resultsオプションをFALSEにして代入する。
> s <- print(xtable(dtf), include.rownames = FALSE, type = "html", print.results = FALSE)
> print(s)
[1] "<!-- html table generated in R(以下、表示省略)
戻り値は要素が1つだけの文字列ベクトル。
ウェブサイトの表を読み込む
rvestパッケージのread_html関数とhtml_table関数を使う。以下は、netkeiba.com(https://www.netkeiba.com/)に掲載の、競走馬オグリキャップの紹介ページの以下の表を、テキストで自動で読み取った例。

> library(rvest)
> html <- read_html("https://db.netkeiba.com/horse/1985102167/")
> tbl <- html_table(html, header = NA)
> print(tbl[[2]])
# A tibble: 10 x 2
X1 X2
<chr> <chr>
1 生年月日 1985年3月27日
2 調教師 瀬戸口勉 (栗東)
3 馬主 近藤俊典
4 生産者 稲葉不奈男
5 産地 三石町
6 セリ取引価格 -
7 獲得賞金 8億8,830万円 (中央) /2,281万円 (地方)
8 通算成績 32戦22勝 [22-6-1-3]
9 主な勝鞍 90'有馬記念(G1)
10 近親馬 オグリローマン、オグリシャダイ
パッケージをインストールするサーバーを指定する
options関数にreposオプションを付けて使う。reposオプションには、次のページに掲載されているCRANのミラーサイトのURLを指定する。一覧は、以下のページ。 https://cran.r-project.org/mirrors.html
日本国内のミラーサイトを指定して、ggplot2パッケージをインストールしてみる。
> options(repos = "https://ftp.yz.yamagata-u.ac.jp/pub/cran/")
> install.packages("ggplot2")
このoptions関数でCRANのミラーサイトを指定すると、install.packages関数でインストールする際は、ミラーサイトを選択させるダイアログは表示されずに、すぐにこのミラーサイトから読み込みを始める。
ggplot2で作成した図を画像ファイルに出力する
ggsave関数を使う。使用すると、最後に表示させた図を画像ファイルに保存する。ファイル名で拡張子を指定すれば、それを自動で判別してその保存形式で保存する。widthオプションなどを指定することで画像のサイズを指定することができる。
> library(ggplot2)
> dtf <- data.frame(xp = 0:5, yp = (0:5) ^ 2)
> ggplot(dtf, aes(x = xp, y = yp)) + geom_point()
> ggsave("fig_64.jpg", width = 6, height = 4, units = "cm")
> ggsave("fig_44.png", width = 4, height = 4, units = "cm")


plotオプションを使うことで、過去に作成した任意の図を画像ファイルに出力することができる。
> g1 <- ggplot(dtf, aes(x = xp * 4, y = yp)) + geom_point()
> g2 <- ggplot(dtf, aes(x = xp * 40, y = yp)) + geom_point()
> ggsave("fig_46_1.png", plot= g1, width = 4, height = 6, units = "cm")
> ggsave("fig_46_2.png", plot= g2, width = 4, height = 6, units = "cm")


ファイルのハッシュ値を得る
opensslパッケージを使う。以下はPHPの圧縮ファイルのハッシュ値(SHA256)を得た例。sha256関数の戻り値はロウ型のため、as.character関数で文字列に変換して表示している。

> library(openssl)
> sha256(file("php-8.2.4-Win32-vs16-x64.zip"))
sha256 a3:60:1f:e2:3a:df:b4:98:5b:e5:2e:b3:a7:36:57:16:35:0e:4b:85:7c:47:58:36:73:a9:aa:53:16:28:85:a3
> as.character(sha256(file("php-8.2.4-Win32-vs16-x64.zip")))
[1] "a3601fe23adfb4985be52eb3a7365716350e4b857c47583673a9aa53162885a3"
例外処理を行う
式の評価や関数の実行時に例外(エラー)が発生した際、処理を分岐させる方法。try関数をsilentオプションをTRUEにして式の評価や関数の実行を行えばよい。
以下の例では、「2 * 3」(構文的に正しい)と「2 * "3"」(数値と文字列をかけているため構文的に正しくない)をそれぞれ評価した例。前者であれば、try関数の戻り値は、本来戻される戻り値を返すが、後者の例外が発生すると、try関数は出力を抑制してtry-errorオブジェクトを返す。try-errorオブジェクトか否かは、最後に処理された実行の戻り値を返す.Last.value変数を使って判定をしている。try関数の戻り値で判定しても同じ。
> 2 * 3
[1] 6
> try(2 * 3, silent = TRUE)
[1] 6
> print(.Last.value)
[1] 6
> class(.Last.value)
[1] "numeric"
> .Last.value == "try-error"
[1] FALSE
> try(2 * "3", silent = TRUE)
> print(.Last.value)
[1] "Error in 2 * \"3\" : 二項演算子の引数が数値ではありません \n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in 2 * "3": 二項演算子の引数が数値ではありません >
> class(.Last.value)
[1] "try-error"
> .Last.value == "try-error"
[1] TRUE
> r <- try(2 * "3", silent = TRUE)
> class(r) == "try-error"
[1] TRUE
環境変数を取得する
Sys.getenv関数を使う。
文字コードを指定してスクリプトを実行する
source関数は、指定したスクリプトファイルを読み込んで実行するが、そのファイルの文字コードが実行環境と同じでない場合は実行することができない。以下は、UTF-8の環境下で、文字コードがシフトJISの以下のようなスクリプトファイル(exec_sjis.Rと保存)を読み込んでコマンドを実行した例。
d <- sum(1:100)
cat(sprintf("1から100まで足した合計 %d\n", d))
> R.version.string
[1] "R version 4.3.0 (2023-04-21 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"
> source("exec_sjis.R")
エラー: invalid multibyte character in parser (exec_sjis.R:2:15)
> source("exec_sjis.R", encoding = "SJIS")
1から100まで足した合計 5050
R起動時に使用できる文字コードを自動的に設定する
Windowsの日本語版Rの起動時の文字コードは長らくシフトJISであったが、バージョン4.2以降はUTF-8に変わった。R起動時に使用できる文字コードを自動的にシフトJISに変更したい場合は、.RProfileファイルを使用する。
バージョン4.2以降は、デフォルトの文字コードはUTF-8。0x82a0(シフトJISで「あ」)を表示してみる。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
> rawToChar(as.raw(c(0x82, 0xa0)))
[1] "\x82\xa0"
表示されない。文字コードはシフトJIS以外であることがわかる。
Rはスタートメニューのアイコンから起動する場合は、フォルダーC:\Users\○○○\Documentsの.RProfileを自動的に読み込む。テキストエディタで作成し、以下の1行を追加してRを再起動してみる。
Sys.setlocale(locale = "Japanese_Japan.932")
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
[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
>
コンソールの最初の表示が変わる。文字コードを確認してみる。
> rawToChar(as.raw(c(0x82, 0xa0)))
[1] "あ"
環境下の文字コードがシフトJISであることがわかる。
.RDataファイルをダブルクリックしてRを起動している場合は、その.RDataファイルと同じフォルダーに置かれた.RProfileを自動的に読み込むため、テキストエディタで作成し、上記と同様にその1行を追加してRを再起動すればよい。
エラーメッセージ「invalid multibyte character in parser」
source関数を実行したときに、ファイルの文字コードを正しく指定していない場合、このエラーメッセージが表示される。encodingオプションに文字コードを正しく指定すればよい。以下の例では、PowerShellで文字コードをシフトJISにしたスクリプトを作成し、それを実行してみる。
PS > @'
>> cat("ABC123あいう\n")
>> '@ | Out-File -Encoding default temp.R
PS > Format-Hex .\temp.R
パス: ○○○
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 63 61 74 28 22 41 42 43 31 32 33 82 A0 82 A2 82 cat("ABC123 ¢
00000010 A4 5C 6E 22 29 0D 0A ¤\n")..
> Get-Content .\temp.R
cat("ABC123あいう\n")
Rでスクリプトを動作させてみる。以下のRの環境下では、Sys.getlocale関数の戻り値のとおり、文字コードはUTF-8である。
> 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"
> source("temp.R")
エラー: invalid multibyte character in parser (temp.R:1:12)
> source("temp.R", encoding = "SJIS")
ABC123あいう
動作環境の設定を確認する
options関数を使う。戻り値はリストのため、個々の値を直接確認するには、名前を指定する。
> options()
$add.smooth
[1] TRUE
$askYesNo
function (msg, ...)
{
(以下、表示省略)
> str(options())
List of 69
$ add.smooth : logi TRUE
$ askYesNo :function (msg, ...)
(以下、表示省略)
> class(options())
[1] "list"
> options()$digits
[1] 7
SQL Serverのデータベースを作成する
RODBCパッケージを使う。以下はSQL Server(インスタンス名:SQLEXPRESS)が稼働しているサーバーで、自身のサーバのSQL Serverに接続してprincessというデータベースを作成した例。接続はWindows認証を前提としている。作成に成功すると何も表示されないが、以下のように失敗すると(既に作成済みのデータベースを作成しようとしている)、エラーメッセージが返される。
> library(RODBC)
> drv <- "driver={SQL Server}"
> srv <- "server=localhost\\sqlexpress"
> s <- paste(drv, srv, sep = ";")
> dc <- odbcDriverConnect(s)
> r <- sqlQuery(dc, "create database princess")
> print(r)
character(0)
> r <- sqlQuery(dc, "create database princess")
> print(r)
[1] "42000 1801 [Microsoft][ODBC SQL Server Driver][SQL Server]データベース 'princess' は既に存在します。別のデータベース名を選択してください。"
[2] "[RODBC] ERROR: Could not SQLExecDirect 'create database princess'"
select文を使い、作成したデータベースを確認してみる。
> r <- sqlQuery(dc, "select name, database_id, create_date from sys.databases")
> print(r)
name database_id create_date
1 master 1 2003-04-08 09:13:36
2 tempdb 2 ○○-○-○ ○:○:○
3 model 3 2003-04-08 09:13:36
4 msdb 4 2019-09-24 14:21:42
5 princess 5 ○○-○-○ ○:○:○
master、tempdb、model、msdbはSQL Serverインストール時に自動作成されるシステムのデータベース。princessデータベースが作成されていることがわかる。
ベクトルやデータフレームをファイルに保存し、後で読み込んで再利用する
save関数を使うことで、複数のオブジェクト(ベクトルやデータフレームなど)をファイルにまとめて保存することができる。このファイルに保存した内容は、後(Rの再起動後も可)でload関数を使ってその環境に読み込んで再利用することができる。読み込み時は保存時のベクトル名などがそのまま使用される。保存するファイルの拡張子は以下の例のとおり「RData」とするのが無難。
> rm(list = ls(all.names = TRUE))
> no <- c(30, 58, 64)
> name <- c("ライスシャワー", "メイショウドトウ", "メジロパーマー")
> seiyu <- c("石見舞菜香", "和多田美咲", "のぐちゆり")
> dtf <- data.frame(no, name, seiyu)
> print(dtf)
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
> lis <- list(no, seiyu)
> print(lis)
[[1]]
[1] 30 58 64
[[2]]
[1] "石見舞菜香" "和多田美咲" "のぐちゆり"
> ls()
[1] "dtf" "lis" "name" "no" "seiyu"
> save(dtf, lis, file = "test.RData")
> rm(list = ls(all.names = TRUE))
> ls()
character(0)
> load("test.RData")
> ls()
[1] "dtf" "lis"
> print(dtf)
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
> print(lis)
[[1]]
[1] 30 58 64
[[2]]
[1] "石見舞菜香" "和多田美咲" "のぐちゆり"
load関数で読み込まれたベクトルなどと同じ名前のベクトルなどが既にその環境下にある場合は、上書きされてしまうことに注意。
> rm(list = ls(all.names = TRUE))
> ls()
character(0)
> dtf <- data.frame(no = 1:3)
> print(dtf)
no
1 1
2 2
3 3
> load("test.RData")
> ls()
[1] "dtf" "lis"
> print(dtf)
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
save関数はデフォルトでファイルをgzip圧縮をするため、ファイルサイズは小さくなるが、その分、保存時も読み込み時も時間がかかることに注意。
ベクトルやデータフレームをファイルに保存し、後で読み込んで再利用する
saveRDS関数を使うことで、オブジェクト(ベクトルやデータフレームなど)をファイルに保存することができる。このファイルに保存した内容は、後(Rの再起動後も可)でreadRDS関数を使ってその環境に読み込み再利用することができる。save関数と異なり、一つのオブジェクトしか保存することができず、readRDS関数で読み込む際は、その読み込み先のオブジェクトを指定する必要がある。
> rm(list = ls(all.names = TRUE))
> ls()
character(0)
> no <- c(30, 58, 64)
> name <- c("ライスシャワー", "メイショウドトウ", "メジロパーマー")
> seiyu <- c("石見舞菜香", "和多田美咲", "のぐちゆり")
> meibo <- data.frame(no, name, seiyu)
> print(meibo)
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
> saveRDS(meibo, file = "meibo.rds")
> rm(list = ls(all.names = TRUE))
> ls()
character(0)
> readRDS(file = "meibo.rds")
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
> ls()
character(0)
> dtf <- readRDS(file = "meibo.rds")
> ls()
[1] "dtf"
> print(dtf)
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
saveRDS関数はデフォルトではファイルをgzip圧縮をする。ファイルサイズは小さくなるが、その分、保存時も読み込み時も時間がかかることに注意。
Lahmanパッケージを使う
Lahmanパッケージとは、Sean Lahman氏による1871年からのMLBのデータのデータベース。このパッケージをインストールすることで、いろいろな情報を簡単に扱うことができる。
> options(repos = "https://ftp.yz.yamagata-u.ac.jp/pub/cran/")
> install.packages("Lahman")
これに含まれるデータフレームPeopleには、選手別の簡単な情報が格納されている。イチロー、松井秀喜、大谷翔平に関する情報の一部を表示してみる。
> library(Lahman)
> nrow(People)
[1] 20676
> col <- c("playerID", "birthCountry", "nameFirst", "nameLast", "debut")
> subset(People, nameFirst == "Ichiro")[, col]
playerID birthCountry nameFirst nameLast debut
18191 suzukic01 Japan Ichiro Suzuki 2001-04-02
> subset(People, nameFirst == "Hideki" & nameLast == "Matsui")[, col]
playerID birthCountry nameFirst nameLast debut
11741 matsuhi01 Japan Hideki Matsui 2003-03-31
> subset(People, nameFirst == "Shohei")[, col]
playerID birthCountry nameFirst nameLast debut
13806 ohtansh01 Japan Shohei Ohtani 2018-03-29
上記のとおり、Peopleにはデータベースで扱っている全選手(約2万人)の情報が格納されており、選手のIDとしてplayerIDという文字列が用意されている。
PDFファイルからテキストを抜き出す
pdftoolsパッケージのpdf_text関数を使う。以下は、芸能人「中居正広」の公式ウェブサイト「のんびりなかい」にある2025年1月9日報道発表の記事のPDFファイルから、文書のテキストを抜き出した例。
> library(pdftools)
> filepath <- "http://www.nonbirinakai.co.jp/wp/wp-content/uploads/2025/01/250109.pdf"
> lns <- pdf_text(filepath)
> length(lns)
[1] 1
> s <- unlist(strsplit(trimws(lns), "\\s+"))
> length(s)
[1] 34
> head(s)
[1] "お詫び"
[2] ""
[3] ""
[4] "の度は、皆様にご迷惑をお掛けしていること、大変申し訳なく思っております。"
[5] "こ"
[6] "報道内容においては、事実と異なるものもあり、相手さま、関係各所の皆さまに対しては"
4~5を見てのとおり、PDFファイルの構造上、テキストを表示された文章のようにきれいに抜き出すことは難しいことに注意。
PDFファイルの文書のプロパティを得る
pdftoolsパッケージのpdf_info関数を使う。以下は、芸能人「中居正広」の公式ウェブサイト「のんびりなかい」にある2025年1月9日報道発表の記事のPDFファイルから、文書のプロパティを読み込んだ例。
> library(pdftools)
> filepath <- "http://www.nonbirinakai.co.jp/wp/wp-content/uploads/2025/01/250109.pdf"
> lis <- pdf_info(filepath)
> names(lis)
[1] "version" "pages" "encrypted" "linearized" "keys" "created" "modified" "metadata"
[9] "locked" "attachments" "layout"
> lis$version
[1] "1.4"
> lis$pages
[1] 1
PDFのバージョンは1.4で全1ページのPDFであることがわかる。
PDFファイルの文書のプロパティとは、PDFファイルをAcrobat Readerで開いた際に、左上「メニュー」→「文書のプロパティ」により表示されるファイルの内部情報のこと。エクスプローラー上の右クリックのコンテキストメニューで表示できるプロパティとは異なることに注意。
PDFファイルに含まれているフォントの情報を得る
pdftoolsパッケージのpdf_fonts関数を使う。以下は、芸能人「中居正広」の公式ウェブサイト「のんびりなかい」にある2025年1月9日報道発表の記事のPDFファイルから、文書のフォント情報を抜き出した例。
> library(pdftools)
> filepath <- "http://www.nonbirinakai.co.jp/wp/wp-content/uploads/2025/01/250109.pdf"
> lis <- pdf_fonts(filepath)
> lis |> as.data.frame()
name type embedded file
1 AAAAAA+HiraMinProN-W6 type3 TRUE
(以下、表示省略)
PDFファイルに含まれているフォントの情報はAcrobat Readerでも確認できる。PDFファイルをAcrobat Readerで開いた際に、左上「メニュー」→「文書のプロパティ」→タブ「フォント」で表示される内容がそれである。
PDFファイルを画像に変換する
pdftoolsパッケージのpdf_render_page関数を使うとraw型に変換することができる。これを例えばpngパッケージのwritePNG関数を使えば画像に変換することができる
> library(pdftools)
> filepath <- "https://www.aoni.co.jp/search/items/suzuki-minori.pdf"
> r <- pdf_render_page(filepath)
> library(png)
> ra <- pdf_render_page(filepath)
> library(png)
> writePNG(ra, "suzukiminori.png", dpi = 600)
