R:使用purrr :: pmap_df,同时将原始数据框保存在单个管道中

时间:2017-06-17 20:09:16

标签: r purrr

我想在我创建的purrr:pmap_df上使用data.frame,以便再回复data.frame。但是,我希望原来的data.frame"保持"并且cbind在一个管道中添加到新data.frame。例如:

f <- function(a, b, c) {
  return(list(d = 1, e = 2, f = 3))
}

tibble(a = 1:2, b = 3:4, c = 5:6) %>%
  pmap_df(f)

这会给我:

# A tibble: 2 × 3
  d     e     f
<dbl> <dbl> <dbl>
1     1     2     3
2     1     2     3

但我想保留tibble

# A tibble: 2 × 6
  a     b     c     d     e     f
<int> <int> <int> <dbl> <dbl> <dbl>
1     1     3     5     1     2     3
2     2     4     6     1     2     3

(愚蠢的例子,但你明白我的意思)。在一个管道中执行此操作的任何优雅方式?

1 个答案:

答案 0 :(得分:2)

如果您不想重新定义该功能,最简单的方法是在结果上使用bind_cols,使用.将data.frame放置在您需要的位置:

library(tidyverse)

f <- function(a, b, c) {
    return(list(d = 1, e = 2, f = 3))
}

tibble(a = 1:2, b = 3:4, c = 5:6) %>%
    bind_cols(pmap_df(., f))
#> # A tibble: 2 x 6
#>       a     b     c     d     e     f
#>   <int> <int> <int> <dbl> <dbl> <dbl>
#> 1     1     3     5     1     2     3
#> 2     2     4     6     1     2     3

您还可以使用...来表示pmap的输入,这样您就可以

tibble(a = 1:2, b = 3:4, c = 5:6) %>% pmap_df(~c(..., f(...)))

返回同样的东西。