【问题标题】:R programming simulationR编程模拟
【发布时间】:2019-02-04 12:08:23
【问题描述】:

我一直在研究我在 R 中的模拟问题。问题是

一名矿工被困在矿井中,他有 3 扇门可供选择。
门 1 = 他可以从矿井中出来,需要 2 小时,
Door2 = 他将在 3 小时内旅行,但只会返回矿井,
门 3 = 与门 2 相同的情况,但 5 小时。

我已经创建了一个随机数生成器,如果它得到 1 就会停止(使用 while 循环),但我的问题是如何重复此操作 100 次并将结果放入表格列中。做这类问题有没有更简单的解决方案? (这里是 R 初学者)

这是我的代码:

library(purrr) 
storage <-c() 
d = NULL 
x1 <- rdunif(1, 3, a=1) 

while ( x1 != 1) { 
  x1<- rdunif(1, 3, a=1) 
  storage <-c(storage, x1) 
} 

storage

【问题讨论】:

  • 如果我的回答对你有帮助,请升级,谢谢
  • 对不起,我是新来的。但我已经按下了检查按钮,但赞成票说它会记录但不会显示。我做对了吗? @达伦

标签: r simulation


【解决方案1】:
  • 将 100 个实验存储在一个包含 100 个部分的列表中
  • n表示1号门的编号,如果出现1号门,则进入下一个实验。
  • trial 表示实验顺序

storage <- vector("list", 100)
n <- 0
trial <- 1
while(n < 100){
    x <- sample(1:3, 1)
    storage[[trial]] <- c(storage[[trial]], x)
    if(x == 1){
        n <- n + 1
        trial <- trial + 1
    }
}

storage

之后,我建议您不要将列表转换为数据框,因为每个试验的长度不同。它将使用数据框生成许多 NA 值。

library(dplyr)
hour <- lapply(storage, recode, `1` = 2, `2` = 3, `3` = 5)
total <- lapply(hour, sum) %>% unlist

lapply是处理列表数据的好工具。

【讨论】:

  • 感谢@Darren。现在我已经将我的列表转换为使用 plyr 显示的列。 plyr::ldply(storage, rbind) 。我现在的下一个目标是将每个数字转换为相应的小时数并添加。
  • @RodelG.Aldema 我更新了我的答案。希望对你有帮助。
  • 非常感谢@Darren。
猜你喜欢
  • 2018-09-24
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多