Utility function to create a formula object. Note that it may be very useful when you use pipes.
to_formula(attrs, class)
# evaluator from FSelector package
evaluator <- function(subset, data, dependent = names(iris)[5]) {
library(rpart)
k <- 5
splits <- runif(nrow(data))
results <- sapply(1:k, function(i) {
test.idx <- (splits >= (i - 1) / k) & (splits < i / k)
train.idx <- !test.idx
test <- data[test.idx, , drop = FALSE]
train <- data[train.idx, , drop = FALSE]
tree <- rpart(to_formula(subset, dependent), train)
error.rate <- sum(test[[dependent]] != predict(tree, test, type = "c")) /
nrow(test)
return(1 - error.rate)
})
return(mean(results))
}
set.seed(123)
fit <- feature_search(attributes = names(iris)[-5], fun = evaluator, data = iris,
mode = "exhaustive", parallel = FALSE)
fit$best
#> Sepal.Length Sepal.Width Petal.Length Petal.Width values
#> 7 1 0 0 1 0.9575926
names(fit$best)[fit$best == 1]
#> [1] "Sepal.Length" "Petal.Width"
# with to_formula
to_formula(names(fit$best)[fit$best == 1], "Species")
#> Species ~ Sepal.Length + Petal.Width
#> <environment: 0x55b2458c24f0>