タグ別アーカイブ: R

[R] Rmarkdown(xaringan)で学会発表スライド作るときの超初心者メモ

ちょっと放置してあったので一部思い出しながらですがメモ書きです。もう一ヶ月も前になりますが,発表資料をRmarkdownで作って公開するということをしました。これまでならkeynoteで作ってPDFにしてslideshareやspeakerdeckにしてたのですが,分析が結構モリモリでこの部分はすでにRmarkdownで作ってあったので,その部分をベースにして他のスライドを作ってしまうほうが早いと思ってすべてRmarkdownでいくことにしました(結果的にそれで時間が余計にかかった気も笑)。

Rの講習的なものや、論文投稿時に実験データの分析レポートを添えて出す、という時以外でRmarkdownを使う機会が今までなく、学会発表スライドを作るときにいくつかつまずくポイントがあったので、今後同じことにならないように自分用のメモとして残しておきます。基本的なこともきっと含まれていると思うので、本当に初心者向けです。ちなみに、私が使っているのはオンラインプレビューができるxaringanというやつです。

  1. R chunkオプションでcache =T
  2. 画像を2枚並べて表示する
  3. 画像の埋め込みに注意

Cache = Tオプション

分析の結果を提示する際に、R上で分析したものをそのままスライドに埋め込める(いちいち表にまとめ直してパワポに貼り付けるとかの必要がない)というのがRmarkdownの強みですよね。しかし、中には1つの分析にかなりの時間がかかる場合もあります。その分析コードの部分以外のところを修正したりしてknitすると、分析に時間がかかるので修正したかった部分が反映されたのかとかを見るのにも無駄な時間を費やしてしまいます。特に、xaringanはRmdを保存したら自動的にknitするので、こまめに保存しながらやる癖がついていたらなおさら大変です。分析が1度だけならまだしも、いくつも分析がある場合には数時間とかかかることもあるかもしれません。ベイズとかだったらもっとですよね。

で、これを回避するために、分析コードのRチャンクのオプションとしてcache =Tというのがあります。これをすることで、一度knitして分析をすれば、その計算結果を保存しておいてくれます。よって、分析をいちいちし直すことをしないので時間もかかりません。注意点は,この分析コードのあるチャンク内での変更があった場合と、この分析コードのチャンクオプションに変更があった場合にはもう一度分析をやり直すということです。よって,時間を要する分析のコードは最初にcache =Tにして一度knitしてしまい,細かいところをいじるのは後にするというのがいいのかなと思います。

画像を並べて表示

普通にRで描くプロットを並べて出すには,par(mfrow=(c1,2))みたいにしてあげれば1行2列でできますよね。で,xaringanでこれやってもどうしても2枚横並びの表示になりませんでした。そこで色々調べたところ,出力の際の幅を半分にしてあげればよいというアドバイスを見かけたので,Rチャンクオプションでout.width =”50%”としてあげました。画像の解像度はdpiオプションで調整できるので,この2つの組み合わせでいい感じに仕上げてあげればよいのかなと。

画像の埋め込み

これがxaringan使うときのネックになるポイントなのですが,xaringanは画像ファイルなどがself-containedではないんですよね。よって,ウェブ上にスライドを公開しようとしたときにHTMLファイルだけアップロードすればよいというわけにはいきません。GitHubなどに画像ファイルなどもすべてアップロードする必要がありました。もしかすると何か方法があるのかもしれませんが,結局ウェブにアップロードするしか解決策が見つからなかったのでこういう方法にしました。xaringanはオンラインでプレビューできるという点が強みなのですが,アップロードとかにちょっと手間がかかるというのが難点かもしれません。また,画像ファイルもアップロードすることでオンライン上での閲覧は問題なくなりますが,DLすると見た目が変わる&画像が見れないということになるので,他の媒体でPDF公開されているスライドをDLしてオフライン環境で見ることが多いというような方々にとっては,普通にPDFで公開してくれよめんどいなぁということになってしまうのかもしれません。非常に悩ましいです。

おわりに

私自身GitHub初心者なので,毎回やるたびにどうやってやるのかいちいち調べながらやっていて,もしかすると普通のプレゼンソフトでスライド作ったほうが時間かからないんじゃないか…とか思いつつ,無駄なこだわりでRmarkdownを使って投影資料を作るようにしています。他にもいくつかつまづいたポイントがあったような記憶があるのですが,いかんせんもう覚えていないのでとりあえず上記3点だけメモとして残しておきます。R関係については意外と自分が一番助かっているのではないかと思うくらい自分でよく忘れて記事探すことが多いので,これもきっと未来の自分を助けることになると信じて。そして,こうやって書いて公開すると解決策が見つかったりするかもしれないという淡い期待を抱いて….

なにをゆう たむらゆう。

おしまい。

3/9に東京で統計のワークショップをやります

直前の宣伝になってしまいましたが,きたる2019年3月9日(土)に,JACET英語語彙・英語辞書・リーディング研究会合同研究会にて代打で統計のワークショップ講師を担当することになりました。下記が場所と日時です。

日時:2018年3月9日(土)12:00-17:00(時間は予定)
場所:早稲田大学 11号館 4階 会議室
参加費:500円(予約不要)

下記のリンク先から詳しいプログラムも見れます。

https://sites.google.com/site/jacetlex/

Rを使う予定ですが,Rの操作等についてやっている時間はなさそうなので,基本的にはRを自力で扱うことはできる人が対象になるかと思います。GLMとかGLMMをやってみるというような内容で,基本的には下記のテクニカルレポートで書いたものがベースになります。

田村祐(2016)「外国語教育研究における二値データの分析-ロジスティック回帰を例に-」『外国語教育メディア学会中部支部外国語教育基礎研究部会2015年度報告論集』 29–82.

統計に詳しくない私が講師ですので,末端ユーザーかつ初心者によるワークショップだと思っておいてもらって間違いありません。

当日に使用する資料,Rコードなどは下記のGit Hubにアップロード予定です。

https://github.com/tam07pb915/JACET-SIG_GLMM-Workshop

よろしくお願いします。

なにをゆう たむらゆう。

おしまい。

Rmarkdownでスライド作るときのリアルタイムプレビュー

Twitterでたまたま見つけてすごく便利そうだったので試してみたら本当に便利だったという話です。元ネタは下記のリンク。自分用のメモとしても残しておきます。

Instant preview without fully rebuilding HTML, and the linked navigation

RmarkdownはRスクリプト書くだけじゃなくてスライド作りができて,Rのスクリプトやその結果も出力に混ぜたりできるので便利なのですが,1つの難点が,実際の出力がその場で確認できないということなのですね。つまり,Rmdファイルで書いているものがスライドにどう落とし込まれるのかについては,knitしてHTMLファイルを作らないとわからないと。で,それはめんどくさいので,編集しながらリアルタイムプレビューが見れるようにしたよというのが上のリンク先の話です。xaringanパッケージというものを使います。xaringanパッケージをつかったスライド作成については他に詳しく書かれている方もいるのでそちらのリンクを。

xaringanによるスライド作成入門

もともと,xaringanパッケージのInfinite Moon Readerというものは,編集中の.Rmdファイルをsaveしたらプレビューが見れるというもので,それを拡張してわざわざsaveせずともプレビューが見れるようにしたというものです。デモのスクリーンキャプチャ動画を載せておきます。

上のリンク先にも書いてありますが,Rのコードチャンクはリアルタイムでは反映されないので,一旦saveしてコンパイルし直す必要があります。

outputオプションがxaringan::moon_readerになっていないとこのプレビュー機能は使えないので,デザインが気に入らないという人はcssファイルをいじって自分好みに変更するということをしなくてはいけないようです。詳しくは,上の「スライド作成入門」のリンクを御覧ください。私は日本語フォントが中国語っぽくなってしまってうのを避けるために,フォントの設定だけいじりました。slides_filesの下にあるremark-css-0.0.1に,”default-fonts.css”というファイルがあるので,それをコピペしてRmdファイルが有る場所と同じディレクトリに”My-font.css”というファイルをつくりました。その中で,”body{ font-family:”の後ろに自分の好きなフォントを書いて保存すればOKです(下記の画像参照)。

他には,スライドのフォントサイズを変えるというのもしたかったので,下記のリンクを参考にしました。フォントを変えるのと同様に,”default.css”をコピペして”My-theme.css”というファイルを作り,そこにスライド全体のフォントサイズを変える設定を追記しました。また,リンク先にスライドの1ページだけフォントサイズを変える”.my-one-page-font”というのもあったのでそれも追記しました。

https://stackoverflow.com/questions/53481699/customize-font-size-for-all-the-slides-in-xaringan

それから,スライドの中で一部分だけ文字サイズを小さくしたり大きくしたりというのもタグでできると便利なので,下記のリンク先で書かれていた”.small”と”.large”というのも”My-theme.css”に追記しています。

https://github.com/yihui/xaringan/wiki/Font-Size

これらの自分好み設定を反映させるには,YAMLヘッダーのoutputオプションを次のようにしてあげます。

output:
xaringan::moon_reader:
css: [“My-theme.css”,”My-font.css”]

Rmarkdownでスライド作ることに慣れている人や,がつがつcssファイル書いてカスタマイズできる人には当たり前のことかもしれないのですが,私はそのあたり初心者なのでこういうことも知りませんでした。

ちなみにですが,このxaringan::moon_readerにはめちゃくちゃ面白い“yolo: true”というオプションがあります。

 

ちなみに,これは挿入される画像を自分で指定することもできますし,どのくらいの頻度かも指定できます。こういう遊び心があるのはなんかいいですよね。

というわけで,Rmarkdownでスライドを作ったりする方はぜひ一度お試しあれ。

なにをゆう たむらゆう。

おしまい。

 

[R] 同じディレクトリ内でファイルを複製する

はじめに

ライティングの授業で(またそれかよ),次のようなことを考えました。

テンプレートのファイルを作って,学生の人数分だけコピーし,さらにそれぞれのファイルに学生の名前をつけたい!

まず思いつくのは,雛形ファイルを作り,Ctrl+CとCtrl+Vを駆使して学生の人数分のファイルを用意し,1つずつファイルをリネームするといういわゆる土方作業ですが,そんなことやってられませんよね。というわけで,Rで簡単にファイル複製とリネームをやってしまおうということです。別に特別なことはしておらず,自分用のメモです。もっと簡単な方法があれば教えてください。

ワーキングディレクトリを変更

まず,ワーキングディレクトリを,テンプレファイルが置いてある場所に変更しましょう。

setwd("C:/Users/Yu/Desktop/test")

getwd()

## [1] "C:/Users/Yu/Desktop/test"

必要な情報を取得

ファイルをコピーする際にフルパスを使うので,その情報をあらかじめ変数に入れておきます。そして,list.files()関数で,ワーキングディレクトリ内にあるファイルの情報を取得します(別に1つしかないので手入力でもOKです)。そして,originalという変数に,テンプレファイルのフルパスを入れておきます。

dirnow<-getwd()

file<-list.files()
original<-file.path(dirnow,file)


ファイル名の準備

ファイルにつける名前の準備です。ここでは例としてアルファベットを使っていますが,学生の名前を使う場合は学生の名前をコピペする等してname変数に入れてください。その後,テンプレファイルの前に名前をつけてfilenameという変数に入れています。sep=”_”は区切り文字をアンダーバーで指定しているということなので,ここは任意の文字に変えられます。

name<-LETTERS[1:26]
filename<-paste(name,"test.docx",sep="_")

print(filename)

##  [1] "A_test.docx" "B_test.docx" "C_test.docx" "D_test.docx" "E_test.docx"
##  [6] "F_test.docx" "G_test.docx" "H_test.docx" "I_test.docx" "J_test.docx"
## [11] "K_test.docx" "L_test.docx" "M_test.docx" "N_test.docx" "O_test.docx"
## [16] "P_test.docx" "Q_test.docx" "R_test.docx" "S_test.docx" "T_test.docx"
## [21] "U_test.docx" "V_test.docx" "W_test.docx" "X_test.docx" "Y_test.docx"
## [26] "Z_test.docx"

ファイルのコピーとリネーム

それでは,ここで,ファイルのコピーとファイルの名前変更をfor関数で一気に行います。file.copy()関数は,fromでコピー元,toでコピー先を指定します。この時,fromではもとファイルのフルパスであるoriginalを使います。そして,toのところで,「ワーキングディレクトリ+名前変更後のファイル名」を指定してあげると,コピーされたファイル名に名前がつくことになります。paste()関数は,文字列結合の関数です。ファイルの一覧の中にblog.htmlとblog.Rmdというファイルが入っていますが,この2つはこのブログのために作ったファイルですので関係ないです。

for (i in 1:length(filename)){
file.copy(from=original,to=paste(dirnow,filename[i],sep="/"))
}

list.files()

##  [1] "A_test.docx"     "B_test.docx"     "blog.html"      
##  [4] "blog.Rmd"        "C_test.docx"     "D_test.docx"    
##  [7] "E_test.docx"     "F_test.docx"     "G_test.docx"    
## [10] "H_test.docx"     "I_test.docx"     "J_test.docx"    
## [13] "K_test.docx"     "L_test.docx"     "M_test.docx"    
## [16] "N_test.docx"     "O_test.docx"     "P_test.docx"    
## [19] "Q_test.docx"     "R_test.docx"     "S_test.docx"    
## [22] "T_test.docx"     "test.docx"       "test.Rproj"     
## [25] "U_test.docx"     "V_test.docx"     "W_test.docx"    
## [28] "X_test.docx"     "Y_test.docx"     "Z_test.docx"

こんな感じでファイル複製とリネームができます。Google Classroomを使っていると、教材ファイルをコピーして配布という機能があり、それを使うと自動的に学生の名前のついたファイルができるのですが,それなしでやろうとすると,こうなるかなという感じです。

これを使って何をするかという記事はまた改めてポストしようと思います。

なにをゆう たむらゆう。

おしまい。

R MarkdownからそのままWordPressに

下記は,Rmarkdownの出力をそのままWordPressに流し込むためのテストです。Rmarkdownファイルを開いたときに入っているデフォルトのコードと文章です。RmarkdownからWordPressに流すために必要な作業については下記ウェブサイトが参考になりました。

R markdownの出力をWordpressへそのまま投稿する | On Your Mark . Tokyo

ただし,plotの画像が表示されなかったので,それを解決するために下記のウェブサイトも参考にしました。

How to publish with R Markdown in WordPress

 

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

plot of chunk pressure

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

[R] sjPlotパッケージのバージョンアップ

Rで回帰モデルの図示をするときに私が使うパッケージは主に2つあって,1つはeffectsパッケージ,もう一つはsjPlotパッケージです。前者については,以前NagoyRで発表したことがあります。

effectsパッケージを用いた一般化線形モデルの可視化

後者は,lm, glm, lmer, glmerなどの関数で作った回帰モデルの結果が入ったオブジェクトを渡すと,その結果をggplot2に渡して可視化してくれます(その他にもいろんな可視化が可能ですが,私が使うのは主に回帰モデルの可視化です)。昔(数年前)までは,sjp.lm,sjp.glm,sjp.lmer,sjp.glmerなど,もとの回帰モデルに合わせて図示する際の関数を選ぶ仕様になっていました。そして,交互作用図を描きたいときは,sjp.int関数を使うというような。それが,最新版のsjPlotパッケージでは,これらの関数がなくなりすべてplot_modelという関数に統一されているようです(下記のサイトによると2017年10月にこの変更があったようです)。使用例は以下のサイトが参考になります。

„One function to rule them all“ – visualization of regression models in #rstats w/ #sjPlot

交互作用図は,type引数でintにするか,またはtypeをpredにして,termsで交互作用を指定するようです。

plot_model(fit, type=”int”)

or

plot_model(fit, type =”pred”, terms =c (“test”, “group”))

みたいな感じです。これについては,下記のページが参考になります。

 

Plotting Interaction Effects of Regression Models

より詳細な引数の説明などは以下のページに書いてあります(RDocumentationのページ)。

plot_model function | R Documentation

D院生のときに書いたスクリプトではGLMMの結果の可視化にsjp.glmerとかsjp.intを使っていたので,それらが動かなくなっていました。調べたらこういう仕様の変更があったと。一つの関数で,引数の組み合わせで色々な図が描けるというのは便利でいいですね。ただ,テーブル形式(HTML)で回帰モデルの結果を出力するsjt.lm系の関数は,lm, glmなどと組み合わせて,sjt.lm, sjt.glm, sjt.glmer, sjt.lmerなどのままのようです。

それから,最近lme4のモデル式の書き方でstanを使ったベイズ推定ができるbrmsというパッケージを知った(遅い)のですが,plot_model()はbrmsパッケージのモデルにも対応しているようです。まだ試してはいないので,いつかまたブログに書こうかなと思います。

では。

なにをゆう たむらゆう。

おしまい。

RStudio 1.0.143

MacのRStudioを新しいversion(1.0.143)にアップデートしました。

何が変わっているのかなと思ったら,Rmdでコードを実行した時に,もはやコードの実行結果がコンソール上に表示されなくなっていてびっくり。これはこれで便利なのかもしれないけど,慣れていなさすぎて逆に戸惑っています…

もちろん,コンソール上に直接打ち込んでいたり,R Script上で打ち込んでいれば結果はコンソールに出るのですが,RmdファイルのRチャンクをつかっている場合,そのチャンクの下に結果が表示されるようになっていて,大きいデータはGUIでポチポチするようになっています。

別ウィンドウに出せるようにもなっていて,Notebook Outputと呼ばれているようです。

多分出力の結果によってこのアウトプットのされ方も色々変わってくるのでしょうね。細かいことはまだよくわかってませんが,ちょっと使ってびっくりしたのはこの仕様でした。

個人的にはRStudioは好きで今まで使ってきていたのですが,これはなんかちょっと違うような…

なにをゆう たむらゆう

おしまい。

※追記

プロットも右下のペインではなくRチャンクの下に表示されるようになっているようです。