1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#' @rdname eval_select
#' @export
eval_rename <- function(expr,
data,
env = caller_env(),
...,
strict = TRUE,
name_spec = NULL) {
ellipsis::check_dots_empty()
rename_impl(
data,
names(data),
as_quosure(expr, env),
strict = strict,
name_spec = name_spec
)
}
# Caller must put vars in scope
rename_impl <- function(x,
names,
sel,
strict = TRUE,
name_spec = NULL) {
if (is_null(names)) {
abort("Can't rename an unnamed vector.")
}
pos <- eval_select_impl(
x,
names,
{{ sel }},
strict = strict,
name_spec = name_spec,
type = "rename"
)
# Check for unique names only if input is a data frame
if (is.data.frame(x) || is_null(x)) {
names[pos] <- names(pos)
with_subscript_errors(
vctrs::vec_as_names(names, repair = "check_unique")
)
}
pos
}
# Example implementation mainly used for unit tests
rename <- function(.x, ..., .strict = TRUE) {
pos <- eval_rename(expr(c(...)), .x, strict = .strict)
names(.x)[pos] <- names(pos)
.x
}
|