2016-08-06 4 views
1

今、私はrでpurrrパッケージを使用する方法を学び、1、2、...、99,100コインフリップのそれぞれ5サンプルを生成する方法について考えています。 私のイメージでは、リストを作成することです..purrrを使ってコインフリップを生成する

[[1]] 

[[1]] 
[1] 1 0 1 0 0 

[[2]] 

[[1]] 
[1] 1 0 0 0 1 

[[2]] 
[1] 0 1 0 1 1 

[[3]] 

[[1]] 
[1] 0 1 1 1 0 

[[2]] 
[1] 1 0 0 0 1 

[[3]] 
[1] 0 1 1 1 1 

.. 

のようになります。その誰も私がこれを作る手助けができますか?しかし

library(purrr) 
1:100 %>% map(function(x) rerun(x, rbinom(5,1,.5))) 

次のように

+1

'purrr ::マップ(1:100、〜再放送(5、rbinom(。 (1、100、関数(x)rerun(5、rbinom(x、1,0))) ' – hrbrmstr

+0

' rerun' isnは、あなたの "フルベースのRソリューション"には依然として多少の痛みがあります。 – Spacedman

答えて

3

あなたはマップ機能を使用して、ベクター1:100の各要素に適用される機能rerunをしたい、複製のためのデフォルトが生成することであるreplicateを、使用することも簡単です列方向アレイ。

lapply(1:100, function(x) replicate(x,rbinom(5,1,0.5))) 

この場合、ベースRの表現がはるかに高速であることに注意してください。あなたは多数表現の法則でちょうど興味を持っている場合

a <- function() 1:100 %>% map(function(x) rerun(x, rbinom(5,1,.5))) 
b <- function() lapply(1:100, function(x) replicate(x,rbinom(5,1,0.5))) 

library(microbenchmark) 
microbenchmark(a(),b()) 

Unit: milliseconds 
expr  min  lq  mean median  uq  max neval cld 
    a() 96.89941 104.83822 117.10245 111.48309 120.28554 391.9411 100 b 
    b() 16.88232 18.47104 23.22976 22.20549 26.31445 49.0042 100 a 

編集、コメント欄にご質問については、次のように行うことができます。

plot(1:100, do.call("c", lapply(b(), mean)), 
type= "l", xlab = "replications", 
ylab = "proportion of heads") 
abline(h = .5) 

enter image description here

+0

申し訳ありませんが、この機能は "1コイン"に対して5回、100回反転します。私が欲しいのは、1コインで5フリップ、2コインで5フリップ、3コインで5フリップ、などです。 –

+0

あなたの説明に対処するために編集されました。 – shayaa

+0

アドバイスをいただきありがとうございます。各サンプルの頭の割合のヒストグラムを作成する場合、どうすればいいですか? –

0

私が正しくあなたを理解していれば、これはあなたが後にしているものです:

lapply(1:100, function(x) replicate(x,rbinom(5,1,0.5),simplify = FALSE)) 
関連する問題