использовать имя переменной в предикате mutate_if - PullRequest
0 голосов
/ 05 декабря 2018

Я могу использовать оболочку 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?Другими словами, я хочу выполнить мутацию переменных, которые (1) включены в varnames и (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 здесь.

...