Slide 1

Slide 1 text

RでHex R + Shinylive + Quarto = 最強 2024/12/07 statditto @Japan.R 2024

Slide 2

Slide 2 text

自己紹介 ● X : @st4tditt0 ● B:@statditto ● R: ○ 好きなパッケージ紹介ドラゴン @Tokyo.R 112 ○ 相関データのサンプルサイズ設計 @Tokyo.R 115

Slide 3

Slide 3 text

Rといえば何角形 ?

Slide 4

Slide 4 text

Rといえば六角形! (Hex)

Slide 5

Slide 5 text

六角形といえば?

Slide 6

Slide 6 text

Hex (Board Game)

Slide 7

Slide 7 text

Hex (Board Game) ● 二人が交互にコマを置く ● 対辺を繋げたら勝ち ● Each player placed stones. ● They can win connecting their sides.

Slide 8

Slide 8 text

Write with R!

Slide 9

Slide 9 text

How to make Make Board Place stone Check win End ● 必要な機能 ○ 盤面生成 ○ 石の配置 ○ 勝利条件チェック ● interactiveにやるなら サーバーが必須......?

Slide 10

Slide 10 text

Shinylive ● サーバー無しでShinyを利用できる![1] ○ WebR君がいい感じにしてくれている ● 最近のアップデートでより便利に[2, 3] ● Shiny apps without Shiny server. ○ Recently updated make Shinylive more usefull. Yutaniさんに感謝 🙏

Slide 11

Slide 11 text

盤面生成 Make board ggplot2::stat_summary_hex() やgeom_hex()で六角形の描写 は可能 密度プロットが簡単に書ける

Slide 12

Slide 12 text

盤面生成 ggplot(long_board, aes(x = col, y = row, z = player)) + stat_summary_hex( binwidth = c(1, 1), linewidth = 1, colour = "black", fun = function(x) mean(x, na.rm = TRUE) ) + scale_fill_gradient2( low = "white", mid = "#FF0033", high = "#00B900", midpoint = 1, na.value = "grey" ) + coord_fixed() Make board データの持ち方を工夫して ゴリ押し それっぽい

Slide 13

Slide 13 text

石の配置 ui <- fluidPage( titlePanel("Hex Game"), mainPanel( plotOutput("hex_board", click = "plot_click") ) ... ) server <- function(input, output) { input$plot_click # ここに色々入ってる感じ ... } Place stone Shinyはグラフのclick位置の 座標を簡単に取れる Atusyさん に 感 謝🙏 [4]

Slide 14

Slide 14 text

勝利条件 dfs <- function(board, player, visited, row, col) { size <- nrow(board) if (visited[row, col] || board[row, col] != player) { return(FALSE) } visited[row, col] <- TRUE neighbors <- get_neighbors(row, col, size) for (neighbor in neighbors) { if (dfs(board, player, visited, neighbor[1], neighbor[2])) { return(TRUE) } } return(FALSE) } Check winner DFS(深さ優先探索)で ゴリ押し 面白味なし!

Slide 15

Slide 15 text

完成! ● とりあえず動く[5] ○ Quarto拡張機能[6]が便利 ● リファクタリングして R言語 Advent Calendar 2024で 改めて紹介します!

Slide 16

Slide 16 text

Why R?

Slide 17

Slide 17 text

Because it's fun!

Slide 18

Slide 18 text

Enjoy!

Slide 19

Slide 19 text

ref 1. Shinylive 2. WebAssembly roundup part 2: Shinylive 0.8.0 3. shinylive v0.8.0 のリリースノートを眺めてみる(2024/11/26) 4. Shiny でプロットを click したり brush したりした時に得られるデータま とめ 5. https://github.com/statditto/hex_with_shinylive 6. https://github.com/quarto-ext/shinylive