Skip to content

Commit 3cf568b

Browse files
ilarischeininhadley
authored andcommitted
pull() can also return named vectors (#4102)
1 parent 8e055a9 commit 3cf568b

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

R/pull.R

+13-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#'
66
#' @param .data A table of data
77
#' @inheritParams tidyselect::vars_pull
8+
#' @param name An optional parameter that specifies the column to be used
9+
#' as names for a named vector. Specified in a similar manner as \code{var}.
810
#' @export
911
#' @examples
1012
#' mtcars %>% pull(-1)
@@ -19,13 +21,21 @@
1921
#' pull()
2022
#' }
2123
#'
22-
pull <- function(.data, var = -1) {
24+
#' # Pull a named vector
25+
#' starwars %>% pull(height, name)
26+
#'
27+
pull <- function(.data, var = -1, name = NULL) {
2328
UseMethod("pull")
2429
}
2530
#' @export
26-
pull.data.frame <- function(.data, var = -1) {
31+
pull.data.frame <- function(.data, var = -1, name = NULL) {
2732
var <- tidyselect::vars_pull(names(.data), !!enquo(var))
28-
.data[[var]]
33+
name <- enquo(name)
34+
if (quo_is_null(name)) {
35+
return(.data[[var]])
36+
}
37+
name <- tidyselect::vars_pull(names(.data), !!name)
38+
set_names(.data[[var]], nm = .data[[name]])
2939
}
3040

3141
# FIXME: remove this once dbplyr uses vars_pull()

man/pull.Rd

+7-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/testthat/test-pull.R

+12
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,15 @@ test_that("can extract by name, or positive/negative position", {
1515
expect_equal(pull(df, -2), x)
1616
expect_equal(pull(df, -2L), x)
1717
})
18+
19+
test_that("can extract named vectors", {
20+
x <- 1:10
21+
y <- letters[x]
22+
df <- data_frame(x = x, y = y)
23+
xn <- set_names(x, y)
24+
25+
expect_equal(pull(df, x), x)
26+
expect_equal(pull(df, x, y), xn)
27+
expect_equal(pull(df, 1, 2), xn)
28+
expect_equal(names(pull(df, x, y)), y)
29+
})

0 commit comments

Comments
 (0)