一个数字变成R中的一个向量,答案就是该向量的和

时间:2018-07-18 05:40:28

标签: r

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

2 个答案:

答案 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])

enter image description here

答案 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))