Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RでHex ~ R + Shinylive + Quarto = 最強 ~

statditto
December 07, 2024
250

RでHex ~ R + Shinylive + Quarto = 最強 ~

Japan.R 2024のLTで利用したスライドです。
Enjoy!

statditto

December 07, 2024
Tweet

Transcript

  1. 自己紹介 • X : @st4tditt0 • B:@statditto • R: ◦

    好きなパッケージ紹介ドラゴン @Tokyo.R 112 ◦ 相関データのサンプルサイズ設計 @Tokyo.R 115
  2. How to make Make Board Place stone Check win End

    • 必要な機能 ◦ 盤面生成 ◦ 石の配置 ◦ 勝利条件チェック • interactiveにやるなら サーバーが必須......?
  3. 盤面生成 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 データの持ち方を工夫して ゴリ押し それっぽい
  4. 石の配置 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]
  5. 勝利条件 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(深さ優先探索)で ゴリ押し 面白味なし!
  6. 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