我想在我创建的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
(愚蠢的例子,但你明白我的意思)。在一个管道中执行此操作的任何优雅方式?
答案 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(...)))
返回同样的东西。