функция map2 () в трубе - PullRequest
0 голосов
/ 15 мая 2018

Я получил результаты, как показано ниже

> df
# A tibble: 6 x 5
terms results              R.squared        minP  maxP
<dbl> <list>                   <dbl>       <dbl> <dbl>
1    11 <tibble [6 x 9]>         0.589 0.269       0.939
2    10 <tibble [49 x 9]>        0.589 0.181       0.999
3     9 <tibble [200 x 9]>       0.589 0.0655      1.000
4     8 <tibble [527 x 9]>       0.585 0.000154    0.997
5     7 <tibble [972 x 9]>       0.565 0.0000607   0.998
6     6 <tibble [1,273 x 9]>     0.542 0.000000977 0.998    

Некоторые данные моделирования сохраняются в <list> tibble results, в котором есть несколько столбцов с именами, такими как «Формула», «maxp», «R.squared» и т. Д.

Что я хочу сделать, это найти соответствующую строку в df$results с maxp, равным minP из df.

Я могу получить результаты по map2_df(df$results, df$minP,function(x, y) filter(x, x$maxp==y))

Теперь я бы хотел связать этот шаг со всеми другими предыдущими шагами, такими как

....%>% map2_df(results, minP,function(x, y) filter(x, x$maxp==y)), ....%>% - это шаги для генерации df.

К сожалению, я получаю сообщение об ошибке Error in as_mapper(.f, ...) : object 'y' not found.

Есть предложения?

Обновлен:

Вот воспроизводимый пример:

df <- tibble(x = list(data.frame(a = c(1, 2, 5)), 
data.frame(a = c(1,2,3,4,9)), 
data.frame(a = c(3, 4, 6, 8))),
y = c(5, 4, 6))

> df 
# A tibble: 3 x 2
x                        y
<list>               <dbl>
1 <data.frame [3 x 1]>     5
2 <data.frame [5 x 1]>     4
3 <data.frame [4 x 1]>     6

Я могу запустить map2_df(df$x, df$y, function(x, y) filter(x, x$a==y)), но когда я пытаюсь df %>% map2(x, y, function(x, y) filter(x, x$a==y)), я получил Error in as_mapper(.f, ...) : object 'y' not found

1 Ответ

0 голосов
/ 15 мая 2018

Боюсь, ваш пример может быть проще, чем ваши фактические данные, но он будет выглядеть так:

library(tidyverse)

df <- tibble(x = list(data.frame(a = c(1, 2, 5)), 
                      data.frame(a = c(1,2,3,4,9)), 
                      data.frame(a = c(3, 4, 6, 8))),
             y = c(5, 4, 6))

df %>% 
    mutate(x = map2(x, y, ~filter(.x, a == .y))) %>% 
    unnest()
#> # A tibble: 3 x 2
#>       y     a
#>   <dbl> <dbl>
#> 1     5     5
#> 2     4     4
#> 3     6     6

Обратите внимание, что .x - это фрейм данных, а .y - это вектор.

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