東京r非公式おじさんが教える本当に気持ちいいパッケージ作成法

106
東京. 非公式おじさんが教える本当に気持ちイイ パッケージ作成法 with Studio 42勉強会@東京(#TokyoR) @teramonagi

Upload: tera-monagi

Post on 15-Jan-2015

4.588 views

Category:

Engineering


2 download

DESCRIPTION

Presentation document in TokyoR#42.

TRANSCRIPT

Page 1: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

東京. 非公式おじさんが教える本当に気持ちイイ

パッケージ作成法 with Studio

第42回 勉強会@東京(#TokyoR)

@teramonagi

Page 2: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

もくじ • 1:パッケージ開発環境の準備 • 2:パッケージ開発ハンズオン

–2-1:動くものを作る –2-2:パッケージの配布について –2-3:テストの追加

• 3:その他アレコレ –3-1:C++で機能追加 with Rcpp –3-2:vignetteの作成 with knitr –3-3:おまけ

• 4:参考 2

Page 3: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

1:パッケージ開発環境の準備

3

Page 4: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

のパッケージ?

のパッケージ

||

の拡張機能を提供

4

Page 5: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージにも開発者がいる!!!

5

今までの僕らは、与えられた者を使う側の人間。いい加減、与える側に回りたいよ

Page 6: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

But… 6

Page 7: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

(かつてのパッケージ開発環境)

7

Page 8: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

無茶しやがって…

8

Page 9: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

今は ♥♥♥HEAVEN♥♥♥

9

Page 10: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

ある漢の活躍

10 ※まだ生きてるつーか、現役バリバリです

Page 11: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージ開発のための パッケージ

• devtoolsパッケージ

–開発を楽にする

• roxygen2パッケージ

–Doxygenライクなin-sourceドキュメント生成

• testthatパッケージ

–単体テスト作成・実行

11 Welcome to Hadley world!!!

開発者:Hadley wickham

Page 12: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

12

まさに神(Hadley)が与えし

三種の神器

Page 13: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

おまけ:神を で描画するコマンド

13

library(ggmap)

library(magrittr)

hadley %>% ggimage

Page 14: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージ開発のための パッケージ

•三種の神器をインストール

14

install.packages(“devtools”) install.packages(“roxygen2”) install.packages(“testthat”) ※できればGithubあたりから開発版入れた方がいいかも

Page 15: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

使用する外部ツール/サーヴィス

• MUST

–Rstudio(Rの統合開発環境)

• WANT

–Rtools(主にC++ compiler for windows)

–Git(ゆるふわなTortoiseGitで…)

–Github(パッケージの共有用)

• 各々のインストール方法はggrks 15 ※漢(おとこ)は黙ってOS is Windowsを想定

Page 16: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

2:パッケージ開発ハンズオン

16

Page 17: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージ開発ハンズオン

• OpenWeatherMapが提供するAPIを叩くパッケージ開発

17 ※ http://openweathermap.org/より

Page 18: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

2-1:動くものを作る

18

Page 19: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

動くものを作る(目標)

•その他条件

–インストール可能なものを作る

–警告0でチェックが通るようにする

–出来るだけMinimumなものを作る

–CRANへのUPは闇なので、放置

(最近はGithubでいんじゃね?感ある)

19 ※ここでは、「チェック」とは「Rのパッケージとして正しく動作するか否かをチェック」すること

Page 20: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

よろしい、 ではスタートだ!!! 20

Page 21: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

Studioを起動してポチポチ…

• [File]→[New Project]を選択

21

Page 22: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

• [New Directory]→[R Package]と選択

22

Studioを起動してポチポチ…

※ふつーのRコード書く際にも常に[Empty Project]使っておくのがよい

Page 23: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージの作成

• [Package name]入力,gitも出来れば

23 ※ここではrOpenWeatherMapとした。以下、適当に自分のパッケージ名に読み替える

Page 24: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

雛型完成

24

Page 25: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

…からの不要ファイル削除

•以下は不要なファイルなので削除

–Read-and-delete-me

–man/rOpenWeatherMap-package.Rd

• その他のファイルは

–そのまま使用

–roxygen2の自動生成で上書き

なので放置でOK 25

Page 26: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

大雑把なフォルダ/ファイルの説明 • DESCRIPTION

– パッケージの概要&他パッケージへの依存を書く • NAMESPACE(ここではroxygen2で自動生成させる)

– どの関数をパッケージ外から使うか記述(含む他ライブラリ) • manフォルダ

– .Rd形式のマニュアル(ここではroxygen2で自動生成させる) • Rフォルダ

– 自分で書いたRのコードを突っ込む • XXXignore

– git/githubに対して監視させない無視させるファイルを設定 • XXX.Rproj

– Rstudio用の設定ファイル。テキストベースなので適当なエディタでも編集可能

26 ※赤字ファイル/フォルダを手でいじる、他は自動/GUIから設定

Page 27: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

Studioのオプション変更

27

• [Tools]→[Project Options]→[Build Tools]

※パッケージ構築(ビルド)の環境を整える

Page 28: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

Studioのオプション変更

28

--no-manualでPDF版 マニュアルの生成回避

※CRANにパッケージをUPすれば勝手に作ってくれるので、通常いらないと言えばいらない ※PDF版マニュアルが欲しい場合はTex(TexLive?)のインストールが必要。がんばれ。

Page 29: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

roxygen2の設定

29

roxygen2でDocument自動生成ON

roxygenでどのファ

イルを自動生成するか

どのタイミングでファイルを自動生成するか

※何も考えずに全部チェックでもOKかと

Page 30: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

DESCRIPTIONファイルを修正

30

警告回避のため Licenseは書換MUST

内部で使用するパッケージはImportsに記載しておく

※Imports/Dependsを書いておくと、CRANからinstall.packagesした時に、その他のパッケージも勝手にインストールしてくれる。Dependsの方は、自作パッケージを読み込むと自動でDependsに指定したパッケージまで読み込んじゃう。一方、Importsの場合、自分で作ってるパッケージ内のみで指定したパッケージが使われるように良きに計らってくれる。依存関係という意味で、Dependsは「XX以降のRじゃないとだめですよ~的な」Rのバージョン指定にのみ使われてるパッケージが結構ある on CRAN

Page 31: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

31

次に のコード書く

Page 32: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

のコードを書く • [R/currentWeather.R]として以下を追加

32

※RcurlのgetURL関数でAPI叩いて、それをrjsonのfromJSONでリストにしてるだけ ※関数の引数にデフォルト引数与えるとDocumentが自動生成できない…って githubでissueは出しておいた。一応LC_CTYPEロケールをCにすればいけることは確認済

Page 33: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

のコードを書く • [R/currentWeather.R]として以下を追加

33

一行目に関数の説明を書く。各項目は以下のような意味合いで、 roxygen2パッケージによりHELPが自動生成される際に参照される。 @param:引数の説明 @return:返値の説明 @export:ある場合、この関数をパッケージの

外から呼び出せるようにする。逆にない(書かない)と外から呼び出せない

Page 34: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

• [R/ rOpenWeatherMap.R ]として以下を追加

34

のコードを書く

※ここを書いておくと、HELP・NAMESPACEファイルが自動生成される ※パッケージ名.Rにはパッケージ全体の説明、及び“依存ライブラリ”を書くのが一般的ぽい ※“依存ライブラリ“はNAMESPACEが自動生成される時に使われる

Page 35: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

• [R/ rOpenWeatherMap.R ]として以下を追加

35

のコードを書く

”package名.R”ファイルにパッケー時の説明を

記述。ここに依存関係やパッケージの説明(roxygen2パッケージにより作成されるHELP用)を書く。NULL必須(これもroxygen2用) @name:パッケージ名 @doctype:”package”で。 @import:中で使用しているパッケージを記述 (NAMESPACEの自動生成に使用される) ※パッケージの依存関係は関数側に書く事も出来るが、 管理しやすいのでこちらのほうが良さげ

Page 36: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージビルド関連コマンド群

• [Build]パネルに用意されている

36

[More]を押下すると出現

Page 37: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージの構築(ビルド) • Build & Reload[Ctrl + Shift + B] –作成と読込(R CMD INSTALL )

• Check パッケージ[Ctrl + Shift + E] –チェック(devtools::check)

• Test パッケージ[Ctrl + Shift + T] –テスト(devtools::test)

• Document[Ctrl + Shift + D] –資料作成(devtools::document)

37 ※[]はキーボード・ショートカット、()は裏で走ってる(と思われる)コマンド ※devtoolsはその他にも関数がたくさんあるので、調べてみるといい

Page 38: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

It works!!!

• [Build&Reload]して、関数を実行!動く!

38

Page 39: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

It works!!!

• getCurrentWeatherByCityName関数で、現在の東京の天気を取得

39

Page 40: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

It works!!! • HELPも出る(?getCurrentWeatherByCityName実行)

40 ※roxygen2パッケージがコメントとして書いた部分から自動で作ってくれる

Page 41: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージのチェック

• [Check Check]も警告0で通る

41

Page 42: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

これで貴方も の パッケージクリエーター!!!

42

Page 43: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

ここまでのコード

43

https://github.com/teramonagi/rOpenWeatherMap/tree/First

※DESCRIPTION のLicenseが[MIT + file LICENSE]じゃなくて[MIT]になってます…要修正 ※githubとmergeするときにREADMEとLICENSEファイルが追加されてしまってます

Page 44: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

まとめ

1. 三種の神器をインストール

2. Studioからプロジェクト作成

3. 不要なファイルを削除

4. プロジェクトのオプション変更

5. DESCRIPTIONファイルの変更

6. のコードを書く&コメントを付ける

7. [Build&Load]で完成 44

Page 45: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

2-2:パッケージの配布について

45

Page 46: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

ユーザに配達するまでが

パッケージ開発 46

Page 47: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージの配布法 • Web経由のレポジトリ使っていいなら、基本install.packages関数使うだけで良い

• 一方、そうじゃないケース –ネットワークドライブにソースがどーん –USB/光学ディスク経由

の場合、インストール出来る形式に固めてからそれをインストールする

47

形式:Binary(zip) or Source(tar.gz)

Page 48: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

binary(zip)/source(tar.gz)の作成

48

[Build Source Package]→tar.gz [Build Binary Package]→zip をそれぞれ生成

※devtools::build関数が走る

Page 49: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

固めたパッケージのインストール

• 固めたものを適当に配る • インストールする側はinstall.packages関数の引数を –repos=NULL –type=“binary” or “source”

としてローカルからインストール

49

#zipの時

install.packages("C:/dev/rOpenWeatherMap_1.0.zip", repos=NULL, type="binary") #tar.gzの場合

install.packages("C:/dev/rOpenWeatherMap_1.0.tar.gz", repos=NULL, type="source")

※パスは自分の環境に応じて適当に読み替える

Page 50: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

まとめ 1. パッケージを配布可能なよう固めるために

1.tar.gzの場合:[Build Source Package]

2.zipの場合:[Build Binary Package]

を実行する。

2. インストールは以下のコマンド

1. tar.gzの場合

-install.packages(“固めたファイル", repos=NULL, type=“source")

2. zipの場合

-install.packages(“固めたファイル", repos=NULL, type=“binary“)

50

Page 51: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

2-2:テストの追加

51

Page 52: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

より良いものを作るためには、 動作確認(テスト)は欠かせない

52

Page 53: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

DESCRIPTIONファイルの修正

53

Suggest:にtestthatを指定

※Suggestsはパッケージ本体ではなく、テスト/vignetteのみに使用するパッケージを記載

Page 54: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

お決まりフォルダ&ファイルの作成

• Projectフォルダ直下に[tests]フォルダを追加し、そこに[test-all.R]を追加

54

Page 55: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

test-all.Rの中身

• 決まり文句を書いておくだけ

–library(testthat)

–test_check(“パッケージ名”)

55

Page 56: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

testthatフォルダの追加 • testsフォルダ下に[testthat]フォルダ追加

56

Page 57: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

テストファイルの作成

• 今回は[test-currentWeather.R]を作成

57 ※ファイルはどんどん追加してよい

Page 58: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

テストコードの中身

58

context("Current weather")

test_that("ByCityName works.", {

place <- "Tokyo,Japan"

current.weather <- getCurrentWeatherByCityName(place)

expect_equal(current.weather$name, "Tokyo")

})

どういうテストの集まりなのかを記述。 通常1ファイル1context

expect_equal中身は等しくなって欲しい ※もっとテストしたい時はtest_thatをどんどん書いてCurrent weather系のテストを増やす

テストの作成。第一引数はテスト名

Page 59: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

テストの実行

• Test Package[Ctrl+Shift+T]する

59

Page 60: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

60

合ってるの、 これ?

Page 61: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

テストコードの中身

• “Tokyo”を”Tokyooooo”にわざと変更

61

context("Current weather")

test_that("ByCityName works.", {

place <- "Tokyo,Japan"

current.weather <- getCurrentWeatherByCityName(place)

expect_equal(current.weather$name, "Tokyooooo")

})

Page 62: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

テストの実行

•答えが合わないので怒られる

62

Page 63: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

(テスト結果の解釈として)

便りのないのは良い便り 63

Page 64: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

パッケージのチェック

•要所要所でチェック!!!

64

Page 65: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

まとめ

65

• DESCRIPTIONにSuggests:testthat追記

• testsフォルダを作成し

–test-all.R追加(中身は以下) • library(testthat)

• test_check(“パッケージ名”)

–testthatフォルダを作成し、実際のテスト用ファイル(.R)を作成

Page 66: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

ここまでのコード

66

https://github.com/teramonagi/rOpenWeatherMap/tree/Second

Page 67: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

3:その他アレコレ

67

Page 68: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

若干、趣味に近いお話

68

Page 69: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

3-1:C++で機能追加 with Rcpp

69

Page 70: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

DESCRIPTIONファイルの修正

70

LinkingTo: Rcppがないとincludeオプション(-I)が正しく指定されない ※当然Rcppはinstall.packagesで使えるようにしておく

Page 71: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

srcフォルダにC++コードをおく

71

Page 72: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

C++のコードを書く

72

useDynLib化にパッケージ名、importFrom

はこのまま書く。おまじないだと思っておく

.Rファイル同様のコメントをroxygen形式で記述「#’」ではなく「//’」である点に注意

Page 73: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

It works!!!

• [Build&Reload]して、関数を実行!動く!

73

※パッケージをビルドするとRcppExports.(R|cpp)が自動生成されて そいつらが勝手に読み込まれる

Page 74: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

この辺の試行錯誤記録

• 「@useDynLib パッケージ名」をなくすと… – Error in .Call(“パッケージ名_関数名”, PACKAGE = “パッケージ名”) : “パッケージ名_関数名” not available for .Call() for package “パッケージ名“

でコンパイル通らない。これはDLL/SOを参照するようにしてないため • 「@importFrom Rcpp evalCpp」をなくすと…

– Error in transformSquare(std::vector<double> x) : function 'enterRNGScope' not provided by package 'Rcpp'

でコンパイル通らない。たぶん、Rcppへの参照周りがだめなんだと思う、多分(Rcppのどっかのドキュメントに書いてあったはず)。

• Rcpp系の資料全般、特に以下が参考になった – 「Writing a package that uses Rcpp」

• http://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-package.pdf

74

Page 75: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

One more 趣味.

75

Page 76: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

呪文

• Studioのコンソールに入力

76

Sys.setenv("PKG_CXXFLAGS"="-std=c++0x")

※最近のRcppだと、ソースコード中に // [[Rcpp::plugins(cpp11)]] いれるでOK

Page 77: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

77

やったね!

It opens the door to the frontier of C++

Page 78: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

こういうコードが書けるようになる

78

Before(C++03)

After(C++0X/11)

※書きなおした後、ふつーに[Build&Load]すればOK ※Rcpp11パッケージなんてのもあるけど、まだ追えてない・・・ ※Windowsの場合、2014年7月現在、Rtoolsのgccが4.6.3なので-std=c++11使えない ※Linux/macならgccの新しい奴入れれば-std=c++11でいけると思う ※gccのヴァージョンとC++0x/C++11の対応などは以下参照 https://gcc.gnu.org/projects/cxx0x.html

Page 79: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

79

auto & lambda expression are already engaged!!!

Page 80: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

ここまでのコード

80

https://github.com/teramonagi/rOpenWeatherMap/tree/Third

※C++0xの例コードはなし

Page 81: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

まとめ • DESCRIPTIONにLinkingTo: Rcpp追記 • NAMESPACEを更新するため、適当な

cppファイルで –@useDynLib rOpenWeatherMap –@importFrom Rcpp evalCpp

を記載 • 後はRcppの方法で倣って書く • WindowsのC++11対応は未完遂

81

Page 82: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

3-2:vignetteの作成 with knitr

82

Page 83: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

vignetteを作りたい

• vignette≒パッケージ使用例

•かつてはSweave(≒TeX)のみだったものの、 3.0からR markdown(Rmd)による作成もサポート

• ここではR markdownを使った作成法を紹介(出力はHTML)

83

Page 85: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

DESCRIPTION

85

VignetteBuilder:knitr の追加

Suggestsにknitr追加

Page 86: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

R markdownファイルを追加 • [vignettes]フォルダを作成してその中に保存

86

後で直せる&基本不要っぽいので適当でよさげ

Page 87: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

R markdownファイルの例

87 ※細かいR markdownの書き方は「kinitr, markdown」あたりでググれ

ここ以外はふつーの.Rmdと同じ。vignetteIndexEnrtyは一

覧で見た時に表示される名前を入力

Page 88: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

結果の確認方法-1

•以下を実行

• [inst/doc]フォルダのHTMLがそれ

88

※以下を参照した。 ※How to get RStudio to automatically compile R Markdown Vignettes? (http://stackoverflow.com/questions/19372260/how-to-get-rstudio-to-automatically-compile-r-markdown-vignettes)

devtools::build_vignettes()

Page 89: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

結果の確認方法-2

• 意外とめんどい方法

• 結果の確認手順

1. [Build Source Package]実行

2. 出来たtar.gzを解凍

3. [inst/doc]フォルダのHTMLがそれ

89

Page 90: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

結果の確認

• HTMLのvignetteが出来てる

90 ※これがCRANからインストールされる際には自動で出来るんだと思う、多分

Page 91: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

まとめ • DESCRIPTIONに –VignetteBuilder:knitr –Suggests:knitr

を追加 • R markdownファイルをvignetteEngineをknitrに指定したうえで、適当に作って、[vignettes]フォルダ下に保存

• 結果はbuild_vignettes関数か、tar.gz作って、その中の[inst/doc]を見る

91

Page 92: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

ここまでのコード

92

https://github.com/teramonagi/rOpenWeatherMap/tree/Fourth

Page 93: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

3-3:おまけ

93

Page 94: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

おまけ的な話を箇条書きで-1

•パッケージに専用データ追加したい

–[data]フォルダ作って、そこにrda

形式でデータを保存しておく。別に他の形式(csv, txtなど)でもいいっぽい。

–パッケージ読込後、data関数でロード可能

94

Page 95: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

おまけ的な話を箇条書きで-2

•継続的インテグレーション(CI)したい

–著名な開発者らはtravis使ってる

95 ※ https://travis-ci.org/hadley/dplyrより

Page 96: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

おまけ的な話を箇条書きで-2

• travisにSign-In(Githubアカウント) • 画面に従って、適当にボタン押す • .travis.ymlを書いて、Githubにコミット

96 https://github.com/smbache/magrittr/blob/master/.travis.yml

Page 97: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

おまけ的な話を箇条書きで-2

• Githubにコミットすると自動テスト • 私もはじめました

97 https://travis-ci.org/teramonagi/RFinanceJ

COMING SOON…?

Page 98: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

おまけ的な話を箇条書きで-4

•パッケージ読込時に処理したい

–(慣習的に)zzz.Rというファイルを作成

–.onLoad関数を作って、その中に処理を記述

98

※.onAttach関数でも大体よい。.onLoadとの違いは、.onLoadはNAMESPACEファイルの読込前に実行される一方、.onAttachは.onLoad関数の後、パッケージの環境が見えなくなる前に実行される。

Page 99: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

4:参考

99

Page 100: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

100

以下、参考資料/BLOG post

Page 101: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

2分でパッケージを作ってインストールする

101 http://www.slideshare.net/TokorosawaYoshio/r38

Page 106: 東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法

Enjoy!!! 106