管道中的map2()函数

时间:2018-05-15 19:01:41

标签: r tidyverse purrr

我得到了如下的结果

> 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中有一些建模信息保存,其中有几列名称如“Formula”,“maxp”,“R.squared”等。

我想要做的是在df$results中找到相应的行,maxp等于minP的{​​{1}}。

我可以通过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))

1 个答案:

答案 0 :(得分:3)

我担心您的示例可能比您的实际数据更简单,但它看起来像这样:

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是一个向量。