使用purrr::pmap_dfc
后,我很难在最终数据帧中将函数名称作为标头使用。
我的最终代码具有V1
和V2
作为标题,但是我希望将函数名add_1_times_multi
和neg_1_times_multi
作为标题。下面是一个代表。
library(tidyverse)
# define functions
add_1_times_multi <- function(vec, multi){(vec + 1) * multi}
neg_1_times_multi <- function(vec, multi){-(vec) * multi}
# put functions in list
my_functions <- function(vec,multi){
list(
add_1_times_multi(vec, multi),
neg_1_times_multi(vec, multi)
)
}
# define values
my_vector <- rnorm(n = 10, mean = 100, sd = 1)
multiplyr <- 3
# put values in list
l <- list(list(my_vector), multiplyr)
# purrr::pmap_dfc
pmap_dfc(l, my_functions)
#> # A tibble: 10 x 2
#> V1 V2
#> <dbl> <dbl>
#> 1 308. -305.
#> 2 305. -302.
#> 3 304. -301.
#> 4 304. -301.
#> 5 310. -307.
#> 6 304. -301.
#> 7 298. -295.
#> 8 300. -297.
#> 9 301. -298.
#> 10 305. -302.
由reprex package(v0.2.1)于2018-12-06创建
如上所述,我希望最终结果具有add_1_times_multi
和neg_1_times_multi
作为列名。不是V1
和V2
。
答案 0 :(得分:1)
您定义函数的方式非常曲折。不是创建2个函数,而是创建列出这些函数列表的第3个函数,为什么不直接创建可以提供所需功能的函数呢?
my_function <- function(vec, multi) {
tibble(
add_1_times_multi = (vec + 1) * multi,
neg_1_times_multi = - vec * multi
)
}
此外,由于您只有2个向量作为函数的参数,因此不需要pmap()
,只需使用map2()
:
my_vector <- rnorm(n = 10, mean = 100, sd = 1)
multiplyr <- 3
map2_df(my_vector, multiplyr, my_function)
如果您确实要使用pmap()
:
l <- list(my_vector, multiplyr)
pmap_df(l, my_function)
请注意,您无需在my_vector
中传递list()
,而再通过list()
在multiplyr
中传递。