こぞってR でのじゃんけん関数が作られる。
ここで、R のベクトルを用いて条件分岐を作っている。
R novice としてはグー、チョキ、パーの自分/相手の出す3*3=9 通りをすべて出し尽くせば、やりたいことはなんとかできる。というわけで、outer 関数を使えばこれはできる。
ここで、9通りの手の組み合わせで、勝敗を確定したい。このとき、グー
となる。これをいい感じに一発で書きたい。
というのも、
みたいな行列を作りたい、という場面は、たぶんある。
こういうときにベタに書いておくのもいいが、なんか一発でかっこよく書きたい。
というわけで悩んで見つけたのが、これ。
GCP <- c("Gu", "Chi", "Pa") M <- outer(10*(1:3), 1:3, "-") colnames(M) <- rownames(M) <- GCP
Gu Chi Pa Gu 0 2 1 Chi 1 0 2 Pa 2 1 0
こうすれば、9通りの場合の数から、3パターンへの分岐が一気に数値演算だけでできる。
janken <- function(){ GCP <- c("Gu", "Chi", "Pa") YOU <- menu(GCP, title="Your janken ?") CPU <- sample((1:3), size=1) wl <- switch((10*YOU-CPU)%%3+1, "Tie", "Lose", "Win") sprintf("%s !! You:%s vs R:%s", wl, GCP[YOU], GCP[CPU]) }
janken()
Your janken ? 1: Gu 2: Chi 3: Pa ### ここでコンソールに記入する Selection: 1 [1] "Win !! You:Gu vs R:Chi"