R/unpack.R
to.Rd
Unpacks or binds values into the calling environment, eager eval (no-dot) variation. Uses bquote
escaping.
NULL is a special case that is unpacked to all targets. NA targets are skipped.
All non-NA target names must be unique.
to(...)
... | argument names to write to |
---|
a UnpackTarget
Note: when using []<-
notation, a reference to the unpacker object is written into the unpacking environment as a side-effect
of the implied array assignment. :=
assigment does not have this side-effect.
Array-assign form can not use the names: .
, wrapr_private_self
, value
, or to
.
function form can not use the names: .
or wrapr_private_value
.
For more detials please see here https://win-vector.com/2020/01/20/unpack-your-values-in-r/.
Related work includes Python
tuple unpacking, zeallot
's arrow, and vadr::bind
.
# named unpacking # looks like assignment: DESTINATION = NAME_VALUE_USING d <- data.frame(x = 1:2, g=c('test', 'train'), stringsAsFactors = FALSE) to[train_set = train, test_set = test] := split(d, d$g) # train_set and test_set now correctly split print(train_set)#> x g #> 2 2 train#> x g #> 1 1 testrm(list = c('train_set', 'test_set')) # named unpacking NEWNAME = OLDNAME implicit form # values are matched by name, not index to[train, test] := split(d, d$g) print(train)#> x g #> 2 2 train#> x g #> 1 1 testrm(list = c('train', 'test')) # pipe version (notice no dot) split(d, d$g) %.>% to(train, test) print(train)#> x g #> 2 2 train#> x g #> 1 1 testrm(list = c('train', 'test')) # Note: above is wrapr dot-pipe, piping does not currently work with # magrittr pipe due to magrittr's introduction of temporary # intermediate environments during evaluation. # bquote example train_col_name <- 'train' test_col_name <- 'test' to[train = .(train_col_name), test = .(test_col_name)] := split(d, d$g) print(train)#> x g #> 2 2 train#> x g #> 1 1 test