RStudioで日本語PDF

1.環境

項目 内容
OS windows7
R 3.5.0
knitr 1.20
RStudio 1.1.453
TeXディストリ w32Tex 角藤版

2.R Markdown

RStudioで、新規R Markdownを選択した時に作成される雛形文書そのもの。

3.結果

このまま実行した時の結果。
! Package inputenc Error: Unicode char 蟷エ (U+5E74)

(inputenc) not set up for use with LaTeX.

エラー: Failed to compile 雛形Rmd.tex. See 雛形Rmd.log for more info.
実行が停止されました

どうやら、日本語(Unicode)処理ができないらしい。

4.原因

PDF文書を指定すると、デフォルトのTexとして
(1) windows : MikTex
(2) OSX : MacTex
(3) Linux : TeX Live
のエンジンが使用されるため。
TeX Wikiによれば、
MiKTeX は Microsoft Windwos 向けの TeX のディストリビューションです. TeX Live と並んで国際的に広く使われていますが,日本語 pTeX が含まれていません. 特別な理由がない限り TeX Live または W32TeX の利用をおすすめします.
とのこと。

5.対策

YAMLヘッダーに明示的に、latex_engine として、UTF-8 ベースの TeX を指定する必要があるようです。

文書全体を以下に示します。

6.最後に

Rmdファイルに日本語名を使用したら、見事にコケました
windows上では、日本語のファイル名は使用できないようですので注意してください。
(追)
Linux(Ubuntu18.04)では、日本語ファイル名が問題なく使用できました。

追伸

再テストの結果、上記のR Markdown が一切動作しなくなりました。
Windows 上も Virtual Box の Ubuntu 上でも!
思い当たる点は、
(1) windows – 角藤版を最新にしようとインストーラを起動したこと。結果的には、何もせずキャンセルしたのだが・・・・
(2) Ubuntu – Tex Live のtlmgr が動かないので、その周りの更新等を行ったこと。

一旦、w32Tex(Windows)とTexLive(Ubuntu)を削除し、w32Texは再インストールした。
(Tex Live の再インストールは保留中)
それでも、結果は変わらず。
エラーログからは、エラー内容が全く読み取れず、対策の打ちようがない。
思い悩んだ挙句、思いついたのが「latex_engine」の変更。
「TeXworks」のタイプセットに表示されるものを指定してみよう!
① pdfplatex
指定不可。指定できるのは、pdflatex,lualatex,xelatex の何れかとのこと。
② pdflatex
しからばと、これを指定するも、想定通り Unicode 周りでエラー。
③ lualatex
万歳!問題なくPDFが出力される。
④ xelatex
念のために試してみたが、やはりエラーとなる。

結果として、私の現在の環境では「lualatex」を指定すれば良いようです。
注意
YAMLヘッダに「mainfont」を指定しないと、日本語が表示されないので、次の様に指定する必要があります。

なお、「Meiryo」の部分を「メイリオ」と指定することができませんでしたので、ご注意の程を!

R 起動コマンドの改善(windows編)

RGui を閉じる際に、毎回ワークスペースの保存有無を聞かれるが、答えはいつも[n」なのに・・・
「q(‘n’)」とするのも面倒だし。
こちらのPDF文書およびSlide Shareに、その解決策が記載されていました。
保存有無を問わないようにするには、次の何れかを指定します。

–save ワークスペースを保存して終了
–no-save ワークスペースを保存しないで終了

これを、R のインストール時に作成されたショートカットに設定します。
保存しない場合の設定は、次の通りです。
(1) ショートカットを右クリック、プロパティを開く。
(2) プロパティの「リンク先」を次の通り変更する。
(変更前)”C:\Program Files\R\R-3.5.0\bin\x64\Rgui.exe” –cd-to-userdocs
(変更後)”C:\Program Files\R\R-3.5.0\bin\x64\Rgui.exe” –cd-to-userdocs –no-save
(Rgui の場所は、自分の環境に合わせて変更してください。)
(3) 「OK」をクリックして、変更を保存する。

ubuntu 18.04 への R 3.5 のインストール

UBUNTU PACKAGES FOR Rからの引用。
手順は以下の通り。

/etc/opt/sources.listの編集

最新のR 3.5パッケージを入手するため、/etc/apt/sources.list の最下行に次のエントリを追加する。

追加は、vim でも gedit でも好きなエディタでよい。例えば、gedit なら

とし、上記コードを最下行にコピペし「保存」すればよい。
その際、何やらかんやらメッセージが出るが、ファイルは更新されているので無視してよい。

R のインストール

都道府県境界データの取得

地図描画に使用する都道府県境界データ(ShapeFile)は、次の2つのサイトから取得できる。

1. 国土地理院

(1) GIS ホームページ
(2) データ形式:GML(JPGIS2.1)シェープファイル・・・デフォルトで選択されている
   → 2.政策区域行政区域 を選択
(3) データダウンロードの画面が表示されるので、必要な全国、または都道府県を選択して、「次へ」をクリック
(4) その後、測量した年度を指定し、アンケートに答え、利用約款に同意することでダウンロードが可能になる。

2. e-Stat(政府統計の総合窓口)

(1) e-Stat ホームページ
(2) トップメニューの「地図で見る」をクリック→「境界データダウンロード
(3) 「小地域」→「国勢調査」→「2015年」(2015,2010,2005,2000年のいずれか)
(4) 「町丁・字等別」→「世界測地系緯度経度・Shape形式
(5) 都道府県選択画面が表示されるので、必要なデータをダウンロードする

ggplot2 development version をインストール

ggplot2 による地図を描画するため、現バージョンにバンドルされていない geom_sf() が必要なので、development version をインストールしたい。方法は、こちらに記述されているが、R console から次のコマンドを実行する。

ところが、これがうまく行かない。
途中、2回もRtoolsのインストールが走り、延々処理した揚句の失敗が痛い!
一旦は、インストールを諦めたものの、どうしても欲しい物は欲しいのである。

思い直し、Rtoolsの何たるかものかを調べることから再開。
Rtoolsとは、Windows 環境でパーッケージをソースからインストールする際に
「C++でコンパイルするため,C++コンパイラが必要で,WindowsではRtoolsを使う」
とのこと。

Rtoolsのインストール手順は以下の通り。
(1) 既存のRtoolsをアンインストール
(2) Building R for Windows からRtoolsをダウンロード
(3) ダウンロードした RtoolsXX.exe(XX:バージョン)をダブルクリック
(4) R console から次のコマンドを入力して、gcc がインストールされていることを確認する。

以下のようなメッセージが表示されれば成功。

これで、Rtools のインストールが完了したので、先程のコマンドを実行する。

コンパイルが走るので、時間が掛るが辛抱強く終わるのを待つ。
終ったら、バージョンを確認する。

メデタシ、メデタシ?

Rで地図を描画する – mapview

Ubuntu 17.10 へインストール

Windows環境では、問題なくインストールできたが、
Ubuntuでは、延々処理した揚句、インストール失敗。
そこで、その手順を示す。
(1) libcairo2-dev のインストール
次にインストールする svglite に必要なため、最初にこれをインストールする。

(2) svglite のインストール
Rコンソールから

(3)mapview のインストール
Rコンソールから

以上

Rで地図を描画する geom_sf()

Rでshapefileを入力して、地図を描画できると言うことで、いろいろ試してみるも、
問題山積して、収拾ががつかない状況にある。
しかし、何とか解決したものだけでもメモにして残しておく。
環境は、windows7、R 3.4.4(2018/4/6時点の最新版)

geom_sf()がインストールできない

shapefileを入力するのに、従来は maptools の readShapePoly 等を使用するわけだが、現在は

と、警告が発せられる。

Googleで調べてみると、将来の方向性として sf パッケージが良さそうなので sf をインストールしてみる。
RでGISをやるときにはsfパッケージ、という世の中になるらしい。に詳しい説明があります。)
これによって、shapefileは首尾よく入力できるようにはなった。が、sf::st_read()で入力したデータは fortify でのフォーマット変換ができないので、geom_sf()を使用することになる。

これで plot を使用すれば地図の描画はできるが、ggplot2 を使用する場合は、geom_sf()を使用しなければならない。
geom_sf()は、ggplot2 の関数だが、バージョン2.2.1にはこれがバンドルされていないと言う問題がある。
インターネットを探せば、上位にこのインストールの件についての質問が為されているが、答えは何時も

で、インストールせよとのご託宣。種々調べたが、これ以外には方法がない模様。

しかし、試しに windows 環境で実行するも、結果的に失敗に終わる。断定はできないが多分無理。
Windows な人の結論、
次期バージョンを待とう!

(インストールはこちらをご覧ください。)
windowsは見捨てて、guest os の Ubuntu 17.10 で再挑戦。インストールのコマンドは全く同じ。
こちらは、問題なくインストール完了!
ggplot2 2.2.1.9000(変なバージョン番号だが問題はなし)

(「RでGISをやるときにはsfパッケージ、という世の中になるらしい。」によれば、Ubuntu 16.10 以降でなければ、いろんな問題があるらしいので注意してください。)

reshape2とtidyr

例えば、ggplot を使用して次の様な「男女別の人口推移」のグラフを作るものとします。

総務省の人口統計等からデータは入手できます。
ダウンロード後、Excelなどで次のように編集して、csv形式でとして保存するのが一般的な方法かと思います。

単純な表なので簡単に作れますが、面倒と思う人のため、次にデータを用意しておきました。

データの構成は、このように作るのが一般的と思いますが、これを上のような棒グラフでプロットするのは大変困難です。
x軸(年次)が共通で、y軸が各々男と女を別個にプロットすると重なり合ってしまうためです。回避手段(例えば、dodge を使うなど)は有るかもしれませんが、私の力量では無理です。
この問題の解決策は、データを次の通りに変更すること(が、一番手っ取り早い手段)です。

つまり、年次別に男と女の2行にしてにデータを持つことです。当然、数値が男女何れかを識別するために、変数名「男」、「女」をデータとする必要があります。(なお、この形式のデータフォーマットは、前者を wide-format、男女別に人口を持つ後者を long-format と言うのだそうです。)
力技でこのような変換もできますが、簡単に行うのがreshape2::melttidyr::gatherです。
変換方法は次の通り。
(1) reshape2::melt

(2) tidyr::gather

この2つは、全く同じことを行っていますが、tidyrの方がスピードが速いのでお勧めだそうです。

Rで行と行の計算を行う

Rで異なる行同士の演算ってどうしたものやら、全く分からない。
と言うことで、SQLite3を使おうとしたもの。(前のブログ参照)
データは、SQLite3と同じ次のテーブルを使います。

このsaleの年度間の増減を計算したい場合、
つまり、次の様な表を作成するにはどうするか?

R の場合も、「LAG」がこの問題を解くキーワードでした。
mutate内で、lag()を使用します。

実行結果は次の通り。

通常の言語では、何のこともないこのような計算が、Rではある程度の予備知識がなければ途方に暮れてしまう程、面倒なものですね。

plyr と dplyr を比較してみる

準備

両方ともに、中々インターネットを探してみても情報が少ないので、あちらこちらか情報を掻き集めて比較してみようと思う。
データには、irisやflightsは馴染みがなく、かつデータ数が多過ぎて検証が難しいので、次のサンプルを使用します。

このデータは、気象庁のページからダウンロードしたものなので、自分の居住地のものが欲しい人は、こちらからダウンロードしてください。

データ入力

(1) plyr

① 各月ごとの最高気温の平均を計算

①-1 .()関数を使用する

.()を使用します。結果は、上と同じです。

② 最高気温の平均と標準偏差を計算

③ 列の追加

最高気温の平均を列に追加します。

(2) dplyr

① 各月ごとの最高気温の平均を計算

② 最高気温の平均と標準偏差を計算

②-1 最高気温の平均と標準偏差を計算

summarise_at を使った場合。結果は、上と同じです。

②-2 最高と最低気温の平均と標準偏差を計算

③ 列の追加

最高気温の平均を列に追加します。

これを年月でグループ化してみましょう。

おまけ

条件付きデータカウント

各月別に真夏日を数えてみよう。
知らないと、意外に面倒。データ数を数えるのでcountと思いきやエラー。sumを使うのが正解だそうです。

もののついでに棒グラフで表示してみる。


取り敢えずここまで。