如何在QuickCheck中生成具有某些属性的数据框

时间:2016-04-04 14:50:40

标签: r dataframe 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作为函数的输入附加到某些属性是相当常见的,遗憾的是文档在这一部分真的很神秘。

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

1 个答案:

答案 0 :(得分:1)

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))