map_dfc для каждой строки данных с входными данными - PullRequest
2 голосов
/ 20 апреля 2019

Я начал изучать использование библиотеки «purrr» и хотел узнать, как мне поступить следующим образом:

Цель

Применение функции к каждой строке кадра данных с входными данными в виде столбцов и привязка выходных данных функции в виде столбца во входном информационном кадре

Идея

Из документации кажется, что map_dfc - идеальная функция

Попытка решения

library(purrr)
library(dplyr)

test_func <- function(n, lambda){
  return(n+lambda)
}

n <- seq(1,10,1)
lambda <- seq(1, 10, 1)

new_df <- list(n=n,lambda=lambda) %>% cross_df()

new_df <- map_dfc(new_df, test_func)
# even tried the below
# new_df <- map_dfc(new_df, ~test_func) 

Error

Error in .f(.x[[i]], ...) : argument "lambda" is missing, with no default

Ответы [ 2 ]

2 голосов
/ 20 апреля 2019

Способ purrr - кажется ** - будет использовать invoke

new_df %>% 
  mutate(new_col = invoke(test_func, new_df))
# A tibble: 100 x 3
#       n lambda new_col
#   <dbl>  <dbl>   <dbl>
# 1     1      1       2
# 2     2      1       3
# 3     3      1       4
# 4     4      1       5
# 5     5      1       6
# 6     6      1       7
# 7     7      1       8
# 8     8      1       9
# 9     9      1      10
#10    10      1      11
# … with 90 more rows

Из файла справки:

Эта пара функций облегчает объединение функции и списка параметров для получения результата. invoke - это оболочка для do.call, которая упрощает использование в трубе.

То есть invoke(test_func, new_df) совпадает с

test_func(new_df[[1]], new_df[[2]])

** В справочном файле также написано enter image description here


Без пакета purrr

do.call(test_func, new_df)
1 голос
/ 20 апреля 2019

Вам необходимо использовать семейство функций map2_*, поскольку вы walk работаете над двумя столбцами:

map2_dfc(new_df[1],new_df[2],test_func)

EDIT Вы можете достичь того же самого с base s Reduce:

 Reduce(test_func,new_df)
 #[1]  2  3  4  5  6  7  8  9 10 11

purrr выход: Вы можете переименовать вашу колонку по мере необходимости:

     n
   <dbl>
 1     2
 2     3
 3     4
 4     5
 5     6
 6     7
 7     8
 8     9
 9    10
10    11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...