Я часто работаю с formula
объектами и обнаружил, что очень удобно преобразовывать дискретные переменные в факторы.Предположим следующий пример:
library(caret); library(data.table); data("iris"); iris <- as.data.table(iris)
dummy <- dummyVars(~ -1 + factor(Species,
levels = c("setosa", "versicolor", "virginica")
), data = iris)
predict(dummy, newdata = iris[1,])
, который возвращает правильный кадр, как и ожидалось.
Мой вопрос:
Если задан новый неопределенный уровень Species
, множитель возвращает NA
, в то же время дополнительно портя окончательный результат:
predict(dummy, newdata = iris[1,][, Species:= "something_undefined"])
Однако в некоторых случаях полезно заменить новые метки в качестве значения по умолчанию, т.е. типичная / медианная метка вместо NA
.Один из возможных способов, который я мог бы придумать, - написать собственную функцию custom.na.impute
для работы с такими значениями и использовать ее по умолчанию na.action
, то есть
predict(dummy, newdata = iris[1,][, Species:= "something_undefined"],
na.action = custom.na.impute)
Однако, если я правильно понимаю, здесь яЯ должен был бы вручную написать правила для всех различных факторов и обновить их с включением новых факторов. Вместо этого я ищу что-то вроде этого :
factor(Species, levels = c("setosa", "versicolor", "virginica"),
na.value = "setosa")
То есть, чтобы иметь возможность определить значение по умолчанию / отсутствует для любого factor
и указать его непосредственно в формулеобъект, без необходимости возиться с кастомами na.actions
.
Любые идеи / предложения будут оценены!