Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
xaringanパッケージの内容をちょっとだけ
Search
Kazuhiro Maeda
October 11, 2019
Technology
1.1k
0
Share
xaringanパッケージの内容をちょっとだけ
Yakitori.R #02 (fukuoka.R #16)
Kazuhiro Maeda
October 11, 2019
More Decks by Kazuhiro Maeda
See All by Kazuhiro Maeda
Will Positron accelerate us? (update)
kazutan
1
180
積もってく会議メモをどうにかしたかった
kazutan
0
280
分析システムにR Markdownを組み込む
kazutan
0
560
Rに管理されてみる
kazutan
0
500
私とR、そしてキャリア
kazutan
2
3.9k
tubeplayR v1.0への道
kazutan
2
240
R, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話
kazutan
2
690
週次KPIレポートをconfluenceへUpするためにやったこと
kazutan
1
1.6k
最近のRパッケージ開発事情
kazutan
0
390
Other Decks in Technology
See All in Technology
「QA=テスト」「シフトレフト=スクラムイベントの参加者の一員」の呪縛を解く。アジャイルな開発を止めないために、10Xで挑んだ「右側のしわ寄せ」解消記 #scrumniigata
nihonbuson
PRO
5
1.2k
【関西製造業祭り2026春】現場を変える技術はここまで来た〜世界最大の製造業見本市から持って帰ってきたもの〜
tanakaseiya
0
130
Gaussian Splattingの表現力を拡張する — 高周波再構成とインタラクションへのアプローチ —
gpuunite_official
0
140
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
shuta13
3
300
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8k
The 7 pitfalls of AI
ufried
0
210
自動テストだけで リリース判断できるチームへ - 鍵はテストの量ではなくリリース判断基準の再設計にあった / Redesigning Release Criteria for Lightweight Releases
ewa
7
3.6k
AI対話分析の夢と、汚いデータの現実 Looker / Dataplex / Dataform で実現する品質ファーストな基盤設計
waiwai2111
0
430
みんなの考えた最強のデータ基盤アーキテクチャ'26前期〜前夜祭〜ルーキーズ_資料_遠藤な
endonanana
0
310
AI時代に、 データアナリストがデータエンジニアに異動して
jackojacko_
0
750
データモデリング通り #5オンライン勉強会: AIに『ビジネスの文脈』を教え込むデータモデリング
datayokocho
0
260
Claude Code / Codex / Kiro に AWS 権限を 渡すとき、何を設計すべきか
k_adachi_01
5
1.2k
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.3k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
Everyday Curiosity
cassininazir
0
200
Building AI with AI
inesmontani
PRO
1
980
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Thoughts on Productivity
jonyablonski
76
5.1k
Being A Developer After 40
akosma
91
590k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
130
Transcript
xaringan パッケージの内容をちょっとだけ fukuoka.R / Yakitori.R kazutan 2019-10-11
今⽇のお話 xaringanパッケージとは 実はエグい実装その1 実はエグい実装その2 2 / 17
xaringan パッケージとは R NinjaことYihui作のパッケージ 基本的な情報 R Markdownでスライドを作成できる remark.jsというライブラリを活⽤ 気付いたら世界各地で流⾏った このスライドもそうです
特徴 renderが軽量 chunkの評価は別 リアルタイムで編集をPreviewできる 他のRmdスライドテンプレートとはちょいちょい書き⽅が違う 例えばスライド区切りが だったり 3 / 17
xaringan 、内部的にはかなりエグい remark.jsを利⽤している remark.jsはmarkdown記法の⽂字列を読み込んでスライド化 実はこれが問題となる(後述) R Ninjaは「隠れ蓑の術」でクリアした リアルタイム編集(markdownレンダリング) 本来R MarkdownはrenderしないとViewerに出せない
R Ninjaはこれを「無限⽉読」(個⼈的には千⾥眼?)でクリアした 今⽇はこのあたりを簡単に紹介 4 / 17
おさらい: R Markdown の処理 詳しくは以下の記事を参照: R Markdownの内部とテンプレート開発 https://kazutan.github.io/TokyoR61/intoTheRmarkdown_d.html R Markdown
の流れ <Pandoc 系> <knit 系> .md pre_processor html, docs, pdf... output_format post_processor Pandoc .Rmd フォーマット テンプレ pre_knit .md output_format post_knit knit 5 / 17
忍法「隠れ蓑の術」 課題1 remark.jsはmarkdown記法を対象とするけど、Pandocを通すと強制的にhtmlにされてしま う。どうしたらいいか? R Ninjaの回答 スライドに表⽰させるドキュメント部分をバイパスさせればいい は? 6 /
17
忍法「隠れ蓑の術」 コード部分(1) バイパスさせるために、⼀時ファイルを準備 https://github.com/yihui/xaringan/blob/master/R/render.R#L84 コメントでも書いてますね tmp_md = tempfile('xaringan', fileext =
'.md') # store md content here (bypass Pandoc 7 / 17
忍法「隠れ蓑の術」 コード部分(2) 以下の処理をpre_processorとして準備 Rmdファイルからyamlとbodyを分離させる body部分をさっきの添付ファイルに書き込む https://github.com/yihui/xaringan/blob/master/R/render.R#L172-L185 pre_processor = function( metadata,
input_file, runtime, knit_meta, files_dir, output_dir ) { res = split_yaml_body(input_file) write_utf8(res$yaml, input_file) res$body = protect_math(res$body) content = htmlEscape(yolofy(res$body, yolo)) Encoding(content) = 'UTF-8' write_utf8(content, tmp_md) c( if (seal) c(' variable', 'title slide=true'), if (!identical(body, res$body)) c(' variable', 'math=true') ) }, 8 / 17
忍法「隠れ蓑の術」 コード部分(3) pandocによる変換処理の後に、Pandocの挿⼊機能を使って差し込む https://github.com/yihui/xaringan/blob/master/R/render.R#L119-L138 html_document2 = function( , includes =
list(), mathjax = 'default', pandoc_args = NULL ) { if (length(includes) 0) includes = list() includes$before_body = c(includes$before_body, tmp_md) includes$after_body = c(tmp_js, includes$after_body) 実際には細かい調整とかしてるけど、⼤まかにはこんな感じです 9 / 17
忍法「無限⽉読」 課題2 どうやってリアルタイムレンダリングしてるの? R Ninjaの回答 こんな感じで: 1. 簡易的なHTTPサーバーを起動させる servr パッケージで実現
2. 必要なライブラリを送る remark.jsなど 3. RmdファイルをHTTPサーバーへ送り、Viewerに表⽰させる Viewerについてはこちら tubeplayRパッケージはなぜRStudio上でYouTubeを再⽣できるのか 4. Rmdファイルをモニタリングし、変更を察知したらそれをサーバーへ送る rstudioapiを駆使している remark.jsがmdを読み込むというのがポイント 5. 変更を察知したら、Viewerを再読み込みさせる 10 / 17
まとめ R Ninjaまじすごい 11 / 17
おまけ 12 / 17
13 / 17
14 / 17
15 / 17
みんなNinja になろう 16 / 17
Enjoy! 17 / 17