【问题标题】:how to create a data frame with rows and columns for a function in R?如何为 R 中的函数创建包含行和列的数据框?
【发布时间】:2019-10-23 16:29:22
【问题描述】:

我被分配了一个问题,要求我为函数创建数据框,但我不知道如何继续。

要评估停留和切换策略,我们必须多次重复游戏 次根据每个策略确定获胜的比例。去做这个, 编写另一个名为monty_hall() 的函数,它有一个参数iter,即 迭代次数,它返回一个包含iter 行和五行的数据框 列。这个函数应该调用monty_hall_one_play() 函数。 您可能想要编写某种类型的循环或尝试replicate()

函数monty_hall() 应返回的数据框列是:

  • car_door,给出隐藏汽车的门。

  • contestant_door,给出了参赛者最初选择的门。

  • host_door,给了主人打开的门。

  • switch,切换策略的结果; 1是赢,0是输。

  • stay,停留策略结果; 1是赢,0是输。

到目前为止,我的代码看起来像

monty_hall <- function(iter) {
  replicate(iter,monty_hall_one_play())
}
monty_hall(5)

我的函数 monty_hall_one_play 的代码是

monty_hall_one_play <- function() {
  first <- sample(x = c(1:3),size = 1,replace = FALSE,prob = c(1/3,1/3,1/3))
  second <- sample(x = c(1:3),size = 1,replace = FALSE,prob = c(1/3,1/3,1/3))

  if (first == 1 & second == 1) {
    third = sample(c(2,3),1)
  }
  if (first == 2 & second == 2) {
    third = sample(c(1,3),1)
  }
  if (first == 3 & second == 3) {
    third = sample(c(1,2),1)
  }
  if (first == 1 & second == 2) {
    third = 3
  }
  if (first == 2 & second == 3) {
    third = 1
  }
  if (first == 3 & second == 1) {
    third = 2
  }
  if (first == 2 & second == 1) {
    third = 3
  }
  if (first == 3 & second == 2) {
    third = 1
  }
  if (first == 1 & second == 3) {
    third = 2
  }

  return(c(first,second,third))
}

“第一”、“第二”和“第三”与分配的元素相关。

这些是方向:

编写一个名为monty_hall_one_play() 的不带参数的函数 并返回一个数字向量,其中每个元素表示以下内容:

  • 第一个元素是隐藏汽车的门 (从1:3中随机选择)

  • 第二个元素是参赛者最初选择的门 (从1:3中随机选择)

  • 第三个元素是宿主揭示的门

  • 如果参赛者选择了带车的门,主持人随机选择 选择剩下的两个门之一

  • 如果参赛者选择了与车门不同的门, 主人选择了没有藏车的门

我不确定如何创建数据框和函数本身。

【问题讨论】:

  • 您如何解释monty_hall_one_play 函数的结果?如果我得到 2,3,1 意味着什么?
  • 我很抱歉,所以数字对应于分配的元素。第一个是汽车隐藏在后面的门,第二个是最初选择的门,第三个是主机透露的门。

标签: r function loops dataframe replicate


【解决方案1】:

as.data.framecolnames 在你的函数中应该足够了。

monty_hall <- function(iter) {
   results <- replicate(iter, monty_hall_one_play())
   results <- as.data.frame(results)
   colnames(results) <- c(
      "car_door", "contestant_door", "host_door",
      "switch", "stay"
   )
   return(results)
} 

结果

> monty_hall(5)        
  car_door contestant_door host_door switch stay
1        1               3         2      3    1
2        2               2         2      3    2
3        3               1         1      2    3

或者,如果您想整理一下。

monty_hall <- function(iter) {
   replicate(iter, monty_hall_one_play()) %>%
      as.data.frame %>%
      set_names("car_door", "contestant_door", "host_door", "switch", "stay")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多