Why does a named vector need to be unquoted when using recode
?
char_vec <- sample(c("a", "b", "c"), 10, replace = TRUE)
level_key <- c(a = "apple", b = "banana", c = "carrot")
recode(char_vec, !!!level_key) # unquoted here
Why does a named vector need to be unquoted when using recode
?
char_vec <- sample(c("a", "b", "c"), 10, replace = TRUE)
level_key <- c(a = "apple", b = "banana", c = "carrot")
recode(char_vec, !!!level_key) # unquoted here
I'm not sure of the type of explanation you wish to have.
The short answer is that that was how the recode function was designed to work.
As a rule of thumb in programming, specific implementations based on strong assumptions are the easiest sorts of programs/functions to write. Providing more ways/idioms to use a function, and being more accomodating over param values/structures passed in might be 'nicer' for end users, but is harder for developers to do a good job and avoid bugs with.
the code for dplyr::recode is available getAnywhere(recode.character)
function (.x, ..., .default = NULL, .missing = NULL)
{
.x <- as.character(.x)
values <- list2(...)
if (!all(have_name(values))) {
bad <- which(!have_name(values)) + 1
bad_pos_args(bad, "must be named, not unnamed")
}
n <- length(.x)
template <- find_template(values, .default, .missing)
out <- template[rep(NA_integer_, n)]
replaced <- rep(FALSE, n)
for (nm in names(values)) {
out <- replace_with(out, .x == nm, values[[nm]], paste0("`",
nm, "`"))
replaced[.x == nm] <- TRUE
}
.default <- validate_recode_default(.default, .x, out, replaced)
out <- replace_with(out, !replaced & !is.na(.x), .default,
"`.default`")
out <- replace_with(out, is.na(.x), .missing, "`.missing`")
out
}
you can see that the values for the level_key part make assumptions. i.e. that they be collected into a list (list2()
), that the results be fully named etc.
THIS was the solution I was looking for, thank you and next time I'll be more specifc
happy to help
I learned something myself , about the internals of recode, I wouldn't have thought to look otherwise !
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.