назначение вывода `pmap` для фреймов данных с именами паттернов - PullRequest
0 голосов
/ 31 октября 2018

Я использую pmap для запуска одной и той же функции на нескольких фреймах данных и хочу назначить каждый элемент списка вывода отдельному объекту с именем, имеющим шаблон. Но я не могу понять, как это сделать.

Например, вот минимальный пример, где я вычисляю квантили для трех разных переменных -

# function call 
purrr::pmap(.l = list(
  x = list(iris$Sepal.Length, mtcars$wt, anscombe$y4),
  probs = list(seq(0, 1, 0.10)),
  na.rm = list(TRUE)
),
.f = stats::quantile)

# output
#> [[1]]
#>   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
#> 4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 
#> 
#> [[2]]
#>     0%    10%    20%    30%    40%    50%    60%    70%    80%    90% 
#> 1.5130 1.9555 2.3490 2.7730 3.1580 3.3250 3.4400 3.5550 3.7700 4.0475 
#>   100% 
#> 5.4240 
#> 
#> [[3]]
#>    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
#>  5.25  5.56  5.76  6.58  6.89  7.04  7.71  7.91  8.47  8.84 12.50

Создает list из 3 элементов (каждый из которых является кадром данных). Вместо того, чтобы получить list взамен, я хочу автоматически назначать каждый элемент объекту с именем шаблона (например, [[1]] как df_1, [[2]] как df_2, [[3]] как df_3 , так далее.). (Я знаю о функции assign, но не могу понять, как ее объединить с purrr.)

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете сделать это с помощью map2:

library(purrr)
res <- pmap(.l = list(
    x = list(iris$Sepal.Length, mtcars$wt, anscombe$y4),
    probs = list(seq(0, 1, 0.10)),
    na.rm = list(TRUE)
), .f = stats::quantile)

map2(.x = paste0('df_', seq_along(res)), .y = res,
     .f = ~ assign(.x, .y, envir = .GlobalEnv))

# > df_1
#   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
# 4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 
# > df_2
#     0%    10%    20%    30%    40%    50%    60%    70%    80%    90%   100% 
# 1.5130 1.9555 2.3490 2.7730 3.1580 3.3250 3.4400 3.5550 3.7700 4.0475 5.4240 
# > df_3
#   0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
# 5.25  5.56  5.76  6.58  6.89  7.04  7.71  7.91  8.47  8.84 12.50

хотя я думаю, что лучше сохранить результаты в списке.

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