複数のパラメータを持つ分析を記録するという例
> # mdply は,基本的には mapply
> f1 = function() mdply(data.frame(mean=1:3, sd=1:3), rnorm, n=2)
> set.seed(1); (ans = f1())
mean sd V1 V2
1 1 1 0.3735462 1.1836433
2 2 2 0.3287428 5.1905616
3 3 3 3.9885233 0.5385948
>
> # data.frame は本来不要
> f2 = function() {
+ mean=1:3
+ sd=1:3
+ d = data.frame(mean, sd, t(mapply(function(x, y) rnorm(2, x, y), mean, sd)))
+ colnames(d)[3:4] = paste("V", 1:2, sep="")
+ d
+ }
> set.seed(1); identical(ans, f2())
[1] TRUE
>
> # mapply は mdply の 5 倍速
> benchmark(f1(), f2(), columns=c("test", "replications", "elapsed", "relative", "user.self", "sys.self"), replications=1000, order=NULL)
test replications elapsed relative user.self sys.self
1 f1() 1000 2.118 4.555 2.122 0.012
2 f2() 1000 0.465 1.000 0.463 0.003
※コメント投稿者のブログIDはブログ作成者のみに通知されます