MainActivity
我想用上面的句子解决下面的问题。 “缸A包含5张10美元的钞票,5张5美元的钞票和5张1美元的钞票。 B B包含9张20美元的钞票,3张5美元的钞票和3张1美元的钞票。 掷骰子。如果它落在1、2、3或4上,则从Ur A中取出两张钞票(无替换), 否则,从Ur B中提取两张钞票。令X =所提取钞票的总价值。 (a)使用模拟来估计E [X]。” 问题是,当我运行该句子时,总和变成一个包含两个成分的数组,这确实使我感到困惑。然后我自己进行计算,总和的每个成分的总和才是正确的答案。 enter image description here
答案 0 :(得分:1)
如果您认为滚动单个骰子for
次与滚动n
骰子一次相同,则可以避免n
循环。
UrnA <- rep(c(10,5,1), c(5,5,5))
UrnB <- rep(c(20,5,1), c(9,3,3))
n <- 1e3
set.seed(2018);
sum(as.integer(sapply(sample(1:6, n, replace = T), function(x)
if (x <= 4) sample(UrnA, 2) else sample(UrnB, 2))))
#[1] 15818
我在这里使用固定种子来提高可重复性;如有必要,请删除。
我们可以通过重复进行1000次确认收敛
val <- sapply(1:1000, function(x)
sum(as.integer(sapply(sample(1:6, n, replace = T), function(x)
if (x <= 4) sample(UrnA, 2) else sample(UrnB, 2)))))
ggplot(data.frame(idx = 1:1000, val = val), aes(idx, val)) +
geom_point() +
ylim(0, pretty(max(val))[2])
答案 1 :(得分:0)
您的sample
函数都将返回两个值的集合。您需要对它们的组成部分求和。
# Instead of
sum=sum+(dice<=4)*sample(UrnA,2,replace = FALSE)+(dice>=5)*sample(UrnB,2,replace = FALSE)
#Use:
sum=sum+sum((dice<=4)*sample(UrnA,2,replace = FALSE)+(dice>=5)*sample(UrnB,2,replace = FALSE))