UrnA =rep(c(10,5,1),c(5,5,5))
UrnB =rep(c(20,5,1),c(9,3,3))
n=1e3
sum=0
for( i in 1:n ){
dice=sample(1:6,1)
sum=sum+(dice<=4)*sample(UrnA,2,replace = FALSE)+(dice>=5)*sample(UrnB,2,replace = FALSE)
}
E=sum/n我想用上面的句子来解决下面的问题。“骨灰盒A包含5元10元纸币、5元5元纸币和5元1元纸币。骨灰盒B包含9元20元纸币、3元5元纸币和3元1元纸币。掷骰子。如果骰子落在1、2、3或4上,则从骨灰盒A中抽出两张纸币(不替换),否则从骨灰盒B中抽出两张纸币。设X=所抽出的纸币的总价值。(a)使用模拟来估计EX。”问题是,当我运行这句话时,confused.And是一个有两个分量的数组,这让我自己计算,每个分量的和就是正确的答案。enter image description here
发布于 2018-07-18 14:34:41
如果您认为滚动单个骰子n次与滚动n骰子一次相同,则可以避免for循环。
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])

发布于 2018-07-18 13:50:58
两个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))https://stackoverflow.com/questions/51394305
复制相似问题