Создайте список элементов из таблицы, используя карту, и выберите - PullRequest
1 голос
/ 23 декабря 2019

Я хочу сгенерировать список tibble fron one tibble в следующих кодах:

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 Ответ

1 голос
/ 23 декабря 2019

Вы можете использовать .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', .)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...