首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个数字变成R中的一个向量,答案就是该向量各分量的总和

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

Stack Overflow用户
提问于 2018-07-18 13:40:28
回答 2查看 41关注 0票数 1
代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2018-07-18 14:34:41

如果您认为滚动单个骰子n次与滚动n骰子一次相同,则可以避免for循环。

代码语言:javascript
复制
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次来确认收敛。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-07-18 13:50:58

两个sample函数都将返回一组两个值。您需要对它们的组成部分求和。

代码语言:javascript
复制
# 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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51394305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档