我可以使用vars()
中的mutate_at
包装器对名称在字符向量中的变量执行突变:
library(tidyverse)
varnames <- c("mpg", "am")
mtcars.mod <- mtcars %>%
mutate_at(vars(varnames),
funs(as.factor(.)))
is.factor(mtcars.mod$mpg)
#> [1] TRUE
但是,如果我想在这些变量上添加谓词/条件,就像我可以使用mutate_if
那样怎么办?换句话说,我要对varnames
中包含的(1)和(2)满足谓词的变量(例如!is.factor()
我的尝试失败了:
mtcars.mod <- mtcars %>%
mutate_if(~ (names(.) %in% varnames & !is.factor(.)),
funs(as.factor(.)))
#> Error in selected[[i]] <- .p(.tbl[[vars[[i]]]], ...): replacement has length zero
我怀疑names(.)
可能在这里返回NULL。