dplyr `nth ()` не может получить его в канал [Ошибка длины (n) == 1] - PullRequest
0 голосов
/ 01 февраля 2019

Я могу извлечь значение из фрейма данных mtcars с помощью функции dplyr nth().

library(tidyverse)
nth(mtcars$cyl, 2)
#> [1] 6

Однако, когда я передаю его по конвейеру, я получаю следующую ошибку.

mtcars %>% nth(cyl, 2)
#> Error in length(n) == 1 : object 'cyl' not found

mtcars %>% nth(.$cyl, 2)
#> Error in nth(., .$cyl, 2) : length(n) == 1 is not TRUE

Как мне правильно "трубу" это?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

1) Первый аргумент nth не является фреймом данных, поэтому используйте скобки и явно указывайте точку:

mtcars %>% { nth(.$cyl, 2) }
## [1] 6

2) Другая возможностьдолжен использовать оператор %$% magrittr:

library(magrittr)

mtcars %$% nth(cyl, 2)
## [1] 6

3) или использовать with:

mtcars %>% with(nth(cyl, 2))
## [1] 6

4) илииспользуйте $ вот так:

mtcars %>% `$`(cyl) %>% nth(2)
## [1] 6

5) или magrittr extract2:

library(magrittr)

mtcars %>% extract2("cyl") %>% nth(2)
## [1] 6
0 голосов
/ 01 февраля 2019

С ?nth

x - вектор

, когда вы делаете mtcars$cyl, он возвращает вектор.Однако

mtcars %>% nth(cyl, 2)

передает столбец cyl.

сначала вам может понадобиться pull, чтобы получить вектор.

mtcars %>% pull(cyl) %>% nth(2)
#[1] 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...