管道中的 map2() 函数
map2() function in pipe
我得到的结果如下
> 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
等于df
的minP
。
我可以通过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
我担心你的例子可能比你的实际数据更简单,但它看起来像这样:
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
是向量。
我得到的结果如下
> 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
等于df
的minP
。
我可以通过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
我担心你的例子可能比你的实际数据更简单,但它看起来像这样:
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
是向量。