-1

I'd like to generate a data.frame using the QuickCheck R library. The data.frame must have some non-random named columns that must have a certain type. When you run rdata.frame you get a completely random data.frame, with column names like col.1, col.2, ... which is not the goal.

For example the data frame below has two columns (x and y) with the types integer and factor.

> 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

I could do something like

> 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

Which generates the expected format (a data.frame with the correct column names with random data of a specific type). But it seems to me that there must be a better way, since the number of rows is unimportant here.

It's fairly common to have a data.frame that adheres to certain properties as the input to functions, unfortunately the documentation is really cryptic on this part.

Bonus: how do you merge in certain constant values with this data.frame? (e.g. have a column u with values all 0, in addition to the randomly generated data).

David Arenburg
  • 91,361
  • 17
  • 137
  • 196
JoelKuiper
  • 4,362
  • 2
  • 22
  • 33
  • 1
    Your question is pretty cryptic. I don't understand what you are actually asking. – Roland Apr 04 '16 at 14:54
  • I want quickcheck to generate a data.frame with some non-random named columns with random contents of a specific type (e.g. numeric/factor etc). I'll see if I can formulate it better. – JoelKuiper Apr 04 '16 at 15:16
  • One thing I'd like to suggest is to explain what you mean by "the number of rows is unimportant". Would you like to randomize it? – piccolbo Apr 05 '16 at 03:15

1 Answers1

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))
piccolbo
  • 1,305
  • 7
  • 17