通过使用地图从小标题生成小标题列表,然后选择

时间:2019-12-23 06:07:30

标签: r dplyr

我想在以下代码中生成一个小菜一碟的列表。

tbl = tibble(id=1:10, a = rnorm(10), b = rnorm(10))
tbl_list =  c("a", "b") %>% map(~ tbl %>% select(c("id", .)))

我想要的输出是

tbl_list

[[1]]
# A tibble: 2 x 2
     id      a
  <int>  <dbl>
1     1 -0.704
2     2 -0.917

[[2]]
# A tibble: 2 x 2
     id      a
  <int>  <dbl>
1     1 -0.704
2     2 -0.917

但是,它显示错误消息

“ {c("id", .)必须求出列位置或名称,而不是列表的值”,

所以看来.不能被识别为字符,而是列表

您能告诉我如何避免此错误吗?

1 个答案:

答案 0 :(得分:1)

您可以使用.x来访问元素

library(tidyverse)
c("a", "b") %>% map(~ tbl %>% select(c("id", .x)))

#[[1]]
# A tibble: 10 x 2
#      id      a
#   <int>  <dbl>
# 1     1  1.42 
# 2     2  1.51 
# 3     3 -0.385
#...

#[[2]]
# A tibble: 10 x 2
#      id      b
#   <int>  <dbl>
# 1     1  1.42 
# 2     2  0.100
# 3     3  1.28 
#....

您也可以使用.,但是在链式操作中使用.时,它是指链条左侧的对象,即tbl,因此它返回一个错误。要使用.的一种方法是

c("a", "b") %>% map(~select(tbl, c('id', .)))