如何在尊重现有列类型的同时随机生成小标题的观察结果?

How to randomly generate observations for a tibble while respecting existing columns types?

假设我有一个空的 tibble my_tbl(0 行)但是给出了它的列类型。例如:

library(tibble)
library(lubridate)

my_tbl <- tibble(
  x = integer(),
  y = character(),
  w = ymd(),
  z = list()
  )

如何用 n 行随机填充 my_tbl(为了演示我们假设 n=10)?

如果可能的话,我正在寻找一段简单的 tidyverse 代码(但基础 R 也可以)。

我知道我的要求没有完全指定如何填充这些行,但不是简单地为每一列回收一个值就足够了。我想要一种随机生成 tibbles 给定已知列类型的简单方法。最终目标是 运行 对这些生成的 tibbles 进行测试。

您可以编写一个调用 sample 的函数来随机生成每一列:

library(tibble)
library(purrr)

get_random_tbl <- function(tbl, n){
  classes <- map_chr(tbl, class)
  map_dfc(
    classes,
    ~{
      switch(
        .x,
        integer = sample(1:100, n, replace = TRUE),
        character = sample(LETTERS, n, replace = TRUE),
        Date = sample(seq(as.Date('1999/01/01'), as.Date('2019/01/01'), by = "day"), n, replace = TRUE),
        list = sample(c(list("x"), list(1)), n, replace = TRUE),
        stop()
      )
    }
  )
}


get_random_tbl(my_tbl, 3)
# A tibble: 3 x 4
#      x y     w          z        
#  <int> <chr> <date>     <list>   
#1    18 V     2015-11-30 <dbl [1]>
#2    34 D     2004-05-26 <chr [1]>
#3    76 B     2007-03-16 <chr [1]>