by_row | R Documentation |
by_row()
and invoke_rows()
apply ..f
to each row
of .d
. If ..f
's output is not a data frame nor an
atomic vector, a list-column is created. In all cases,
by_row()
and invoke_rows()
create a data frame in tidy
format.
by_row( .d, ..f, ..., .collate = c("list", "rows", "cols"), .to = ".out", .labels = TRUE ) invoke_rows( .f, .d, ..., .collate = c("list", "rows", "cols"), .to = ".out", .labels = TRUE )
.d |
A data frame. |
... |
Further arguments passed to |
.collate |
If "list", the results are returned as a list- column. Alternatively, if the results are data frames or atomic vectors, you can collate on "cols" or on "rows". Column collation require vector of equal length or data frames with same number of rows. |
.to |
Name of output column. |
.labels |
If |
.f, ..f |
A function to apply to each row. If |
By default, the whole row is appended to the result to serve as
identifier (set .labels
to FALSE
to prevent this). In
addition, if ..f
returns a multi-rows data frame or a
non-scalar atomic vector, a .row
column is appended to
identify the row number in the original data frame.
invoke_rows()
is intended to provide a version of
pmap()
for data frames. Its default collation method is
"cols"
, which makes it equivalent to
mdply()
from the plyr package. Note that
invoke_rows()
follows the signature pattern of the
invoke
family of functions and takes .f
as its first
argument.
The distinction between by_row()
and invoke_rows()
is
that the former passes a data frame to ..f
while the latter
maps the columns to its function call. This is essentially like
using invoke()
with each row. Another way to view
this is that invoke_rows()
is equivalent to using
by_row()
with a function lifted to accept dots (see
lift()
).
A data frame.
by_slice()
# ..f should be able to work with a list or a data frame. As it # happens, sum() handles data frame so the following works: mtcars %>% by_row(sum) # Other functions such as mean() may need to be adjusted with one # of the lift_xy() helpers: mtcars %>% by_row(purrr::lift_vl(mean)) # To run a function with invoke_rows(), make sure it is variadic (that # it accepts dots) or that .f's signature is compatible with the # column names mtcars %>% invoke_rows(.f = sum) mtcars %>% invoke_rows(.f = purrr::lift_vd(mean)) # invoke_rows() with cols collation is equivalent to plyr::mdply() p <- expand.grid(mean = 1:5, sd = seq(0, 1, length = 10)) p %>% invoke_rows(.f = rnorm, n = 5, .collate = "cols") ## Not run: p %>% plyr::mdply(rnorm, n = 5) %>% dplyr::tbl_df() ## End(Not run) # To integrate the result as part of the data frame, use rows or # cols collation: mtcars[1:2] %>% by_row(function(x) 1:5) mtcars[1:2] %>% by_row(function(x) 1:5, .collate = "rows") mtcars[1:2] %>% by_row(function(x) 1:5, .collate = "cols")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.