Discalimer:(非常低效的解决方案,请参阅 mnel/Gavin 的解决方案)
正如您可以阅读每个答案下面的许多许多..许多评论,而这个答案试图回答 OP 的具体问题(尽管他的要求可能效率低下),本着保持论坛礼仪的精神,有些人(正确地) 指出这个问题的品味很差,我的回答并不符合论坛的要求。我接受所有批评并仅出于明显的原因将答案留在这里(标记为答案,连续性)。我建议您查看 mnel/Gavin 的答案,以获得针对此特定问题的矢量化解决方案问题。如果你有兴趣查看 for-loop 的实现,请参考这篇文章的底部,但我建议你看一下它以了解 for-loop 的结构,但不要为此具体实现 for-loop问题。谢谢你。
除了@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)X
次并存储在 Y 中。
现在,sum(Y == "T")
给出 x (1 <= x <= 100) 的当前值的总和。因此,最后Youtcomes
将是您的一组模拟Y == Tail
值。
然后,你可以做一个hist(Youtcomes)
.
编辑:如果它是一个需要的for循环解决方案,
# always assign the variable you'll index inside for-loop
# else the object will keep growing every time and a copy of
# entire object is made for every i, which makes it extremely
# slow/inefficient.
Youtcomes <- rep(0, 100)
for (i in 1:100) {
X <- sample(1:6, 1, replace=TRUE, rep(1,6)/6)
Y <- sample(c("H", "T"), X, replace=TRUE, rep(1,2)/2)
# assign output inside the loop with [i] indexing
Youtcomes[i] <- sum(Y == "T")
# since Youtcomes is assigned a 100 values of 0's before
# the values will replace 0' at each i. Thus the object
# is not copied every time. This is faster/efficient.
}