Rで「ガチャとは心の所作」と
Re: Rで「ガチャとは心の所作」について
ご指名があったことに今頃気づいたので,書いて見ました。
元のプログラムにあった iter.max = 10000 は明らかに大きすぎるし,合理的な根拠があってのことではないので,このような値に左右されないようにプログラムしてみるだけで,びっくりするほど(??)効率が上がる。
gacha.sim4 <- function(prob, nop = 10000) {
n.items <- length(prob)
nop.result <- numeric(nop)
for (i in seq(length = nop)) {
x <- sample(n.items, 100, TRUE, prob) # 100 個で足りなきゃ...
repeat {
y <- unique(x)
if (length(y) == n.items)
break
x <- c(x, sample(n.items, 100, TRUE, prob)) # 増やします
}
y <- y[n.items]
nop.result[i] <- which(x == y)[1]
}
list(result = nop.result, prob = prob)
}
a_bicky さんの gacha.sim2 とも比較してみた(replications=10 で)。
> library(rbenchmark)
> p <- rep(1, 6)
> benchmark(gacha.sim(p), gacha.sim2(p), gacha.sim4(p), replications = 10)
test replications elapsed relative user.self sys.self user.child sys.child
1 gacha.sim(p) 10 101.504 22.32329 89.575 12.667 0 0
2 gacha.sim2(p) 10 80.560 17.71718 62.859 18.210 0 0
3 gacha.sim4(p) 10 4.547 1.00000 4.499 0.079 0 0
> p <- c(100, 50, 10, 10, 3, 1)
> benchmark(gacha.sim(p), gacha.sim2(p), gacha.sim4(p), replications = 10)
test replications elapsed relative user.self sys.self user.child sys.child
1 gacha.sim(p) 10 663.660 63.127556 639.333 22.399 0 0
2 gacha.sim2(p) 10 75.856 7.215448 57.587 18.606 0 0
3 gacha.sim4(p) 10 10.513 1.000000 10.371 0.210 0 0
やりたいことは,たいてい用意されているとはよく言われること。
久保さんのグラフ描きについても,example(boxplot) で,参考になる例が見つかる。
#################### 久保さんが書いたプログラム ##############
# 作図例題のための架空データを生成
N.lv <- 5
x <- factor(rep(LETTERS[1:N.lv], each = 20))
y <- rnorm(100)
grp <- factor(rep(c("G1", "G2"), 50)) # Group 1 and 2
# まず,わくだけ描く
boxplot(y ~ x, border = NA) # border = NA は姑息なかんぢ……
# 二種類の箱ヒゲを左右にずらして描く
s <- grp == "G1"
bx <- boxplot(y[s] ~ x[s], plot = FALSE)
bxp(
bx, at = 1:N.lv - 0.15, boxwex = 0.25,
add = TRUE, axes = FALSE, # これを指定しないと「ずれた」x-axis を描く
boxcol = rgb(0, 0, 0, 0.2),
boxfill = rgb(1, 0.5, 0, 0.5)
)
s <- grp == "G2"
bx <- boxplot(y[s] ~ x[s], plot = FALSE)
bxp(
bx, at = 1:N.lv + 0.15, boxwex = 0.25,
add = TRUE, axes = FALSE,
boxcol = rgb(0, 0, 0, 0.2),
boxfill = rgb(0, 0, 1, 0.5)
)
#################### example を書き換えてみたもの ##############
boxplot(y ~ x,
boxwex = 0.25, at = 1:5 - 0.2,
subset = grp == "G1", col = rgb(1, 0.5, 0, 0.5),
xlab = "", ylab = "",
xlim = c(0.5, 5.5), ylim = c(-3, 3), yaxs = "i", xaxt="n")
boxplot(y ~ x, add = TRUE,
boxwex = 0.25, at = 1:5 + 0.2,
subset = grp == "G2", col = rgb(0, 0, 1, 0.5),
xaxt="n")
axis(1, 1:5, LETTERS[1:5])
裕福なスマートフォンユーザーはゲームやTwitterはあまり利用せず、ニュースや旅行、金融関連のアプリを好んで使う傾向にあるという。全体の利用実態と比べると対照的だ。
この手の記事,いったい何が言いたいんだろうか?
「一般庶民感覚とはずいぶん違うもんだなあ」といううらやまし感?その裏返しで,反感?
何が言いたいのか,ちっともわからない。
裕福なスマートフォンユーザは,ゲームや Twitter なんかやる暇はないし,興味はないだろう。逆に言えば,ゲームや Twitter は,いわゆる庶民(大多数,99%くらいか?)を対象にしているんだろう。一日が24時間であるのは,貧民も富豪も同じ。それこそ,ゲームや Twitter にうつつを抜かしているから,いつまでもいつまでも貧乏暮らしをしなければならないのだろう。いい加減,目覚めるべきだぜ!!
- この関数ソースは自分にとって読みにくいので、書き方を変えてみる
if(type == "circular"){ if(ny !=n){ stop("length mismatch in convolution") } }else{ n1 <- ny-1 x <- c(rep.int(0,n1),x) n <- length(y <- c(y, rep.int(0,n-1))) }
このようにするのが普通???かと(かなり妥協したが)
if (type == "circular") { if (ny != n) { stop("length mismatch in convolution") } } else { n1 <- ny-1 x <- c(rep.int(0, n1), x) n <- length(y <- c(y, rep.int(0, n-1))) }