我想在以下代码中生成一个小菜一碟的列表。
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", .)
必须求出列位置或名称,而不是列表的值”,
所以看来.
不能被识别为字符,而是列表
您能告诉我如何避免此错误吗?
答案 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', .)))