实验涉及滚动一个公平的模具并获得x说,然后投掷一个公平的硬币x次并记录尾巴的数量。我需要做50次这个实验并将结果记录在矢量中(我将用它来绘制直方图。)
到目前为止,这是我的代码:
for (i in 1:100)
{X <- sample(6,1,replace=TRUE,c(1,1,1,1,1,1)/6)
Y <- sample(2,1,replace=TRUE,c(1,1)/2)}
Youtcomes <- c(sum(Y))
Youtcomes
但是我没有给我一个包含100个元素的向量,而是只获得一个数字。我哪里错了?
注意:我必须使用for循环。
答案 0 :(得分:6)
使用R
被矢量化的事实。然后,您可以使用二项分布来复制抛硬币。
heads <- rbinom(size = sample(6,100, replace = TRUE), n=100, prob = 0.5)
sum(heads)
答案 1 :(得分:6)
也许我错过了一些东西,但是一次打电话给sample()
来做100个掷骰子,然后将其插入rbinom()
以进行硬币投掷有什么问题?我们将sample()
的输出传递给size
参数
> set.seed(1)
> rbinom(100, size = sample(6, 100, replace = TRUE), prob = 0.5)
[1] 1 1 1 6 1 2 2 2 3 1 2 1 2 1 1 0 3 1 1 3 6 1 2 0 2 1 1 1 2 2 2 1 0 1 4 3 3
[38] 1 5 2 3 2 2 1 3 2 0 2 1 4 2 3 1 1 1 0 1 1 1 1 2 2 1 2 3 1 0 2 1 2 2 4 2 1
[75] 1 5 3 2 3 5 1 2 3 1 4 0 3 1 2 1 1 0 1 5 2 3 0 2 2 3
答案 2 :(得分:4)
正如你可以在每个答案下面阅读许多,很多,......很多评论,而这个答案试图回答OP的具体问题(不管他的要求是多么低效),本着保持论坛的礼仪,一些人(正确地)指出问题是不好的味道,我的答案不符合论坛的要求。我接受所有的批评并在此留下答案只是出于明显的原因(标记为答案,连续性)。我建议你看看mnel / Gavin对这个特定问题的矢量化解决方案的答案。如果你对查看for循环的实现感兴趣,那么请参考这篇文章的底部,但我建议你看看它以了解for循环的结构,但是没有实现for循环到这个特定的问题。谢谢。
除了@Joshua已经提到的主问题之外,你的代码还存在很多问题:
首先,每次在循环内部重写X和Y的值时,在循环结束时,只有Y的最后一个值被总结。
其次,Y
的代码不正确。你说,你必须得到x
次硬币投掷,然而,你使用sample(2, 1, ...)
。 1
必须替换为X
,等于掷骰数。
请尝试使用此代码:
Youtcomes <- sapply(1:100, function(x) {
X <- sample(1:6, 1, replace=TRUE, rep(1,6)/6)
Y <- sample(c("H", "T"), X, replace=TRUE, rep(1,2)/2)
sum(Y == "T")
})
在这里,我们循环100次,每次,样本值介于1和6之间并存储在X中。然后,我们采样head
(H)或tail
(T){{ 1}}次数并存储在Y中。
现在,X
给出x的当前值的总和(1 <= x <= 100)。因此,最后,sum(Y == "T")
将是您的模拟Youtcomes
值集。
然后,您可以执行Y == Tail
。
编辑:如果它是一个所需的for循环解决方案,
hist(Youtcomes)
答案 3 :(得分:1)
X <- sample(6,100,replace=TRUE,c(1,1,1,1,1,1)/6)
Y <- lapply(X , function(x){ res <- sample( c( "H" , "T" ) , x , replace=TRUE , c(1,1)/2 ) ; table( res ) } )
您想对结果进行直方图编制....
res <- unlist(Y)
hist( res[names( res )=="T"] )