@@ -216,6 +216,147 @@ defDataAdd <- function(dtDefs = NULL,
216
216
return (defNew [])
217
217
}
218
218
219
+ # ' Add multiple (similar) rows to definitions table
220
+ # '
221
+ # ' @param dtDefs Definition data.table to be modified
222
+ # ' @param nVars Number of new variables to define
223
+ # ' @param prefix Prefix (character) for new variables
224
+ # ' @param formula An R expression for mean (string)
225
+ # ' @param variance Number or formula
226
+ # ' @param dist Distribution. For possibilities, see details
227
+ # ' @param link The link function for the mean, see details
228
+ # ' @param id A string indicating the field name for the unique record identifier
229
+ # ' @return A data.table named dtName that is an updated data definitions table
230
+ # ' @seealso [distributions]
231
+ # ' @details The possible data distributions are: `r paste0(.getDists(),collapse = ", ")`.
232
+ # '
233
+ # ' @examples
234
+ # ' def <- defRepeat(
235
+ # ' nVars = 4, prefix = "g", formula = "1/3;1/3;1/3",
236
+ # ' variance = 0, dist = "categorical"
237
+ # ' )
238
+ # ' def <- defData(def, varname = "a", formula = "1;1", dist = "trtAssign")
239
+ # ' def <- defRepeat(def, 8, "b", formula = "5 + a", variance = 3, dist = "normal")
240
+ # ' def <- defData(def, "y", formula = "0.10", dist = "binary")
241
+ # '
242
+ # ' def
243
+ # ' @export
244
+ # ' @concept define_data
245
+ defRepeat <- function (dtDefs = NULL ,
246
+ nVars ,
247
+ prefix ,
248
+ formula ,
249
+ variance = 0 ,
250
+ dist = " normal" ,
251
+ link = " identity" ,
252
+ id = " id" ) {
253
+ assertNotMissing(
254
+ nVars = missing(nVars ),
255
+ prefix = missing(prefix ),
256
+ formula = missing(formula )
257
+ )
258
+
259
+ varnames <- paste0(prefix , 1 : nVars )
260
+
261
+ if (is.null(dtDefs )) {
262
+ defNew <- defData(
263
+ varname = varnames [1 ], formula = formula ,
264
+ variance = variance , dist = dist , link = link , id = id
265
+ )
266
+
267
+ for (i in (2 : nVars )) {
268
+ defNew <- defData(defNew ,
269
+ varname = varnames [i ],
270
+ formula = formula , variance = variance ,
271
+ dist = dist , link = link , id = id
272
+ )
273
+ }
274
+ } else {
275
+ defNew <- data.table :: copy(dtDefs )
276
+
277
+ for (i in 1 : nVars ) {
278
+ defNew <- defData(defNew ,
279
+ varname = varnames [i ],
280
+ formula = formula , variance = variance ,
281
+ dist = dist , link = link , id = id
282
+ )
283
+ }
284
+ }
285
+
286
+ return (defNew [])
287
+ }
288
+
289
+ # ' Add multiple (similar) rows to definitions table that will be used to add data to an
290
+ # ' existing data.table
291
+ # '
292
+ # ' @param dtDefs Definition data.table to be modified
293
+ # ' @param nVars Number of new variables to define
294
+ # ' @param prefix Prefix (character) for new variables
295
+ # ' @param formula An R expression for mean (string)
296
+ # ' @param variance Number or formula
297
+ # ' @param dist Distribution. For possibilities, see details
298
+ # ' @param link The link function for the mean, see details
299
+ # ' @param id A string indicating the field name for the unique record identifier
300
+ # ' @return A data.table named dtName that is an updated data definitions table
301
+ # ' @seealso [distributions]
302
+ # ' @details The possible data distributions are: `r paste0(.getDists(),collapse = ", ")`.
303
+ # '
304
+ # ' @examples
305
+ # ' def <- defRepeatAdd(
306
+ # ' nVars = 4, prefix = "g", formula = "1/3;1/3;1/3",
307
+ # ' variance = 0, dist = "categorical"
308
+ # ' )
309
+ # ' def <- defDataAdd(def, varname = "a", formula = "1;1", dist = "trtAssign")
310
+ # ' def <- defRepeatAdd(def, 8, "b", formula = "5 + a", variance = 3, dist = "normal")
311
+ # ' def <- defDataAdd(def, "y", formula = "0.10", dist = "binary")
312
+ # '
313
+ # ' def
314
+ # ' @export
315
+ # ' @concept define_data
316
+ defRepeatAdd <- function (dtDefs = NULL ,
317
+ nVars ,
318
+ prefix ,
319
+ formula ,
320
+ variance = 0 ,
321
+ dist = " normal" ,
322
+ link = " identity" ,
323
+ id = " id" ) {
324
+ assertNotMissing(
325
+ nVars = missing(nVars ),
326
+ prefix = missing(prefix ),
327
+ formula = missing(formula )
328
+ )
329
+
330
+ varnames <- paste0(prefix , 1 : nVars )
331
+
332
+ if (is.null(dtDefs )) {
333
+ defNew <- defDataAdd(
334
+ varname = varnames [1 ], formula = formula ,
335
+ variance = variance , dist = dist , link = link
336
+ )
337
+
338
+ for (i in (2 : nVars )) {
339
+ defNew <- defDataAdd(defNew ,
340
+ varname = varnames [i ],
341
+ formula = formula , variance = variance ,
342
+ dist = dist , link = link
343
+ )
344
+ }
345
+ } else {
346
+ defNew <- data.table :: copy(dtDefs )
347
+
348
+ for (i in 1 : nVars ) {
349
+ defNew <- defDataAdd(defNew ,
350
+ varname = varnames [i ],
351
+ formula = formula , variance = variance ,
352
+ dist = dist , link = link
353
+ )
354
+ }
355
+ }
356
+
357
+ return (defNew [])
358
+ }
359
+
219
360
# ' Read external csv data set definitions
220
361
# '
221
362
# ' @param filen String file name, including full path. Must be a csv file.
@@ -450,11 +591,10 @@ defSurv <- function(dtDefs = NULL,
450
591
formula = 0 ,
451
592
scale ,
452
593
shape = 1 ) {
453
-
454
594
if (is.null(dtDefs )) {
455
595
dtDefs <- data.table :: data.table()
456
596
}
457
-
597
+
458
598
dt.new <- data.table :: data.table(
459
599
varname ,
460
600
formula ,
@@ -520,57 +660,42 @@ defSurv <- function(dtDefs = NULL,
520
660
newvar <- ensureValidName(newvar , call = sys.call(- 1 ))
521
661
assertNotInDataTable(vars = newvar , dt = defVars )
522
662
523
- switch (
524
- newdist ,
525
-
663
+ switch (newdist ,
526
664
binary = {
527
665
.isValidArithmeticFormula(newform , defVars )
528
666
.isIdLogit(link )
529
667
},
530
-
531
668
beta = ,
532
669
binomial = {
533
670
.isValidArithmeticFormula(newform , defVars )
534
671
.isValidArithmeticFormula(variance , defVars )
535
672
.isIdLogit(link )
536
673
},
537
-
538
674
noZeroPoisson = ,
539
-
540
675
poisson = ,
541
-
542
676
exponential = {
543
677
.isValidArithmeticFormula(newform , defVars )
544
678
.isIdLog(link )
545
679
},
546
-
547
680
gamma = ,
548
-
549
681
negBinomial = {
550
682
.isValidArithmeticFormula(newform , defVars )
551
683
.isValidArithmeticFormula(variance , defVars )
552
684
.isIdLog(link )
553
685
},
554
-
555
686
nonrandom = .isValidArithmeticFormula(newform , defVars ),
556
-
557
687
normal = {
558
688
.isValidArithmeticFormula(newform , defVars )
559
689
.isValidArithmeticFormula(variance , defVars )
560
690
},
561
-
562
691
categorical = .checkCategorical(newform ),
563
-
564
692
mixture = {
565
693
.isValidArithmeticFormula(newform , defVars )
566
694
.checkMixture(newform )
567
695
},
568
-
569
696
uniform = ,
570
-
571
697
uniformInt = .checkUniform(newform ),
572
- trtAssign = .checkCategorical(newform ),
573
-
698
+ trtAssign = .checkCategorical(newform ),
574
699
stop(" Unknown distribution." )
575
700
)
576
701
@@ -651,7 +776,7 @@ defSurv <- function(dtDefs = NULL,
651
776
652
777
# ' Check uniform formula
653
778
# '
654
- # ' @description Unifom formulas must be of the form "min;max"
779
+ # ' @description Uniform formulas must be of the form "min;max"
655
780
# ' @param formula Formula as string.
656
781
# ' @return Invisible, error if formula not valid.
657
782
# ' @seealso distributions
0 commit comments