Используйте purrr :: pmap_dfc для перебора функций и сохранения имен функций в качестве заголовков - PullRequest
0 голосов
/ 06 декабря 2018

У меня возникают трудности с получением имен функций в качестве заголовков в моем окончательном фрейме данных после использования 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.

Создан в 2018-12-06 пакетом Представить (v0.2.1)

Как указановыше, я хотел бы, чтобы конечный результат имел имена add_1_times_multi и neg_1_times_multi в качестве имен столбцов.Не V1 а V2.

1 Ответ

0 голосов
/ 30 декабря 2018

Ваш способ определения вашей функции довольно извилист.Вместо того, чтобы создавать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...