Call a multi-argument function with values taken from columns of an data frame or array, and combine results into a list.
Usage
mlply(
.data,
.fun = NULL,
...,
.expand = TRUE,
.progress = "none",
.inform = FALSE,
.parallel = FALSE,
.paropts = NULL
)Arguments
- .data
matrix or data frame to use as source of arguments
- .fun
function to apply to each piece
- ...
other arguments passed on to
.fun- .expand
should output be 1d (expand = FALSE), with an element for each row; or nd (expand = TRUE), with a dimension for each variable.
- .progress
name of the progress bar to use, see
create_progress_bar- .inform
produce informative error messages? This is turned off by default because it substantially slows processing speed, but is very useful for debugging
- .parallel
if
TRUE, apply function in parallel, using parallel backend provided by foreach- .paropts
a list of additional options passed into the
foreachfunction when parallel computation is enabled. This is important if (for example) your code relies on external data or packages: use the.exportand.packagesarguments to supply them so that all cluster nodes have the correct environment set up for computing.
Details
The m*ply functions are the plyr version of mapply,
specialised according to the type of output they produce. These functions
are just a convenient wrapper around a*ply with margins = 1
and .fun wrapped in splat.
Output
If there are no results, then this function will return
a list of length 0 (list()).
References
Hadley Wickham (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software, 40(1), 1-29. https://www.jstatsoft.org/v40/i01/.
Examples
mlply(cbind(1:4, 4:1), rep)
#> $`1`
#> [1] 1 1 1 1
#>
#> $`2`
#> [1] 2 2 2
#>
#> $`3`
#> [1] 3 3
#>
#> $`4`
#> [1] 4
#>
#> attr(,"split_type")
#> [1] "array"
#> attr(,"split_labels")
#>
#> 1 1 4
#> 2 2 3
#> 3 3 2
#> 4 4 1
mlply(cbind(1:4, times = 4:1), rep)
#> $`1`
#> [1] 1 1 1 1
#>
#> $`2`
#> [1] 2 2 2
#>
#> $`3`
#> [1] 3 3
#>
#> $`4`
#> [1] 4
#>
#> attr(,"split_type")
#> [1] "array"
#> attr(,"split_labels")
#> times
#> 1 1 4
#> 2 2 3
#> 3 3 2
#> 4 4 1
mlply(cbind(1:4, 4:1), seq)
#> $`1`
#> [1] 1 2 3 4
#>
#> $`2`
#> [1] 2 3
#>
#> $`3`
#> [1] 3 2
#>
#> $`4`
#> [1] 4 3 2 1
#>
#> attr(,"split_type")
#> [1] "array"
#> attr(,"split_labels")
#>
#> 1 1 4
#> 2 2 3
#> 3 3 2
#> 4 4 1
mlply(cbind(1:4, length = 4:1), seq)
#> $`1`
#> [1] 1 2 3 4
#>
#> $`2`
#> [1] 2 3 4
#>
#> $`3`
#> [1] 3 4
#>
#> $`4`
#> [1] 4
#>
#> attr(,"split_type")
#> [1] "array"
#> attr(,"split_labels")
#> length
#> 1 1 4
#> 2 2 3
#> 3 3 2
#> 4 4 1
mlply(cbind(1:4, by = 4:1), seq, to = 20)
#> $`1`
#> [1] 1 5 9 13 17
#>
#> $`2`
#> [1] 2 5 8 11 14 17 20
#>
#> $`3`
#> [1] 3 5 7 9 11 13 15 17 19
#>
#> $`4`
#> [1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#>
#> attr(,"split_type")
#> [1] "array"
#> attr(,"split_labels")
#> by
#> 1 1 4
#> 2 2 3
#> 3 3 2
#> 4 4 1