如何在 QuickCheck 中生成具有特定属性的数据框

How do you generate a data frame with certain properties in QuickCheck

我想使用 QuickCheck R library 生成 data.frame。 data.frame 必须有一些非随机命名的列,这些列必须具有特定类型。当您 运行 rdata.frame 时,您会得到一个完全随机的 data.frame,其列名如 col.1, col.2, ... 这不是目标。

例如,下面的数据框有两列(x 和 y),类型为整数和因子。

> data.frame(x=1:10, y=rep(F, 10))
    x     y
1   1 FALSE
2   2 FALSE
3   3 FALSE
4   4 FALSE
5   5 FALSE
6   6 FALSE
7   7 FALSE
8   8 FALSE
9   9 FALSE
10 10 FALSE

我可以做类似

> data.frame(x=rinteger(size=~10), y=rlogical(size=~10), z=rdouble(size=~10))
     x     y          z
1  -94 FALSE   7.124120
2  -64 FALSE -47.855625
3  -87 FALSE  -9.622184
4   -9 FALSE -28.678583
5  -78  TRUE  35.932244
6  -96  TRUE 116.449312
7  -63  TRUE  51.389978
8   65  TRUE -65.566058
9   71 FALSE 248.323594
10 -76  TRUE 138.238654

生成预期的格式(data.frame 具有正确的列名和特定类型的随机数据)。 但在我看来,必须有更好的方法,因为行数在这里并不重要。

将遵循某些属性的 data.frame 作为函数的输入是相当普遍的,不幸的是,文档在这部分上确实含糊不清。

奖励:如何将某些常量值与此 data.frame 合并? (例如,除了随机生成的数据外,还有一列 u 的值全为 0)。

library(quickcheck)
library(functional)
nr = rsize() # random number of rows
generators.nr = 
  lapply(
    list(ri = rinteger, rd = rdouble, rl = rlogical), #all the ones you need
    Curry, 
    size = ~nr) 
with(
  generators.nr, 
  data.frame(x = ri(), y = rd(), z = rl(), w = 1))