blply()
and bdply()
let you divide your biom dataset into smaller
pieces, run a function on those smaller rbiom objects, and return the
results as a data.frame or list.
Arguments
- biom
An rbiom object, such as from
as_rbiom()
. Any value accepted byas_rbiom()
can also be given here.- vars
A character vector of metadata fields. Each unique combination of values in these columns will be used to create a subsetted rbiom object to pass to
FUN.
IfNULL
,biom
will be passed toFUN
unaltered. Unambiguous abbreviations of metadata fields are also accepted.- FUN
The function to execute on each subset of
biom
. Forbdply()
, the returned value will be coerced to a data.frame. Forblply()
, any returned value is unmodified.- ...
Additional arguments to pass on to
FUN
.- iters
A named list of values to pass to
FUN
. Unlike...
, these will be iterated over in all combinations. Default:list()
- prefix
When
TRUE
, prefixes the names in initers
with a '.' in the final data.frame or 'split_labels' attribute. Default:FALSE
Value
For bdply()
, a tibble data.frame comprising the accumulated
outputs of FUN
, along with the columns specified by
vars
and iters
. For blply()
, a named list that has details
about vars
and iters
in attr(,'split_labels')
.
Details
You can also specify additional variables for your function to iterate over in unique combinations.
Calls plyr::ddply()
or plyr::dlply()
internally.
See also
Other metadata:
glimpse.rbiom()
Other biom:
biom_merge()
Examples
library(rbiom)
bdply(hmp50, "Sex", `$`, 'n_samples')
#> # A tibble: 2 × 2
#> Sex V1
#> <fct> <int>
#> 1 Female 30
#> 2 Male 20
blply(hmp50, "Sex", `$`, 'n_samples') %>% unlist()
#> Female Male
#> 30 20
bdply(hmp50, c("Body Site", "Sex"), function (b) {
adm <- adiv_matrix(b)[,c("Shannon", "Simpson")]
apply(adm, 2L, mean)
})
#> # A tibble: 9 × 4
#> `Body Site` Sex Shannon Simpson
#> <fct> <fct> <dbl> <dbl>
#> 1 Anterior nares Female 1.43 0.681
#> 2 Anterior nares Male 1.51 0.665
#> 3 Buccal mucosa Female 1.17 0.408
#> 4 Buccal mucosa Male 1.71 0.602
#> 5 Mid vagina Female 0.407 0.167
#> 6 Saliva Female 2.93 0.893
#> 7 Saliva Male 3.17 0.913
#> 8 Stool Female 2.43 0.850
#> 9 Stool Male 2.51 0.835
iters <- list(w = c(TRUE, FALSE), d = c("bray", "euclid"))
bdply(hmp50, "Sex", iters = iters, function (b, w, d) {
r <- range(bdiv_distmat(biom = b, bdiv = d, weighted = w))
round(data.frame(min = r[[1]], max = r[[2]]))
})
#> # A tibble: 8 × 5
#> Sex w d min max
#> <fct> <lgl> <chr> <dbl> <dbl>
#> 1 Female TRUE bray 0 1
#> 2 Female FALSE bray 0 1
#> 3 Female TRUE euclid 123 17185
#> 4 Female FALSE euclid 3 12
#> 5 Male TRUE bray 0 1
#> 6 Male FALSE bray 0 1
#> 7 Male TRUE euclid 292 11855
#> 8 Male FALSE euclid 5 14