Как перебрать один аргумент, применив одну и ту же функцию к одним и тем же данным - PullRequest
0 голосов
/ 17 декабря 2018

«generateFilterValuesData» - это функция пакета «mlr», который использует различные алгоритмы для выбора функции.Я хотел бы применять различные алгоритмы итеративным образом к одним и тем же данным, чтобы изучить различные функции, выбранные различными методами.Для этого в принципе я должен применить одну и ту же функцию к тем же данным, варьируя аргумент «метод» (около 15 возможных значений).Я привожу здесь воспроизводимый пример (я не использовал set.seed (), потому что числовые значения сами по себе не имеют значения):

feature_A <- rnorm(200, 5, 2)
feature_B <- rnorm(200, 3, 2)
feature_C <- rnorm(200, 3.7, 1.3)
feature_D <- runif(200)
feature_E <- rpois(200, 1.6)
feature_F <- rpois (200, 7.3)
feature_G <- rlogis(200)
feature_H <- rexp(200, 2)
feature_I <- rexp (200, 3)
test_activ <- as.factor(rbinom(200, 1, 0.5))

df <- data.frame(feature_A, feature_B, feature_C, feature_D, 
             feature_E, feature_F, feature_G, feature_H, 
             feature_I, test_activ)
library(mlr)
taskg <- makeClassifTask(data = df, target="test_activ")
fv <- generateFilterValuesData(task, method = c("anova.test"))

methods <- c("anova.test", "auc", "cforest.importance","chi.squared", "gain.ratio", "information.gain", 
         "kruskal.test", "oneR", "permutation.importance", 
         "randomForest.importance", "randomForestSRC.rfsrc",
         "randomForestSRC.var.select", "ranger.impurity", 
         "ranger.permutation", "relief", "symmetrical.uncertainty",
         "univariate.model.score", "variance")

Я хотел бы итеративно применять функцию «generateFilterValuesData» над задачей taskg,варьирование методов (т.е. итерация по 18 методам).Я пробовал lapply следующим образом:

lapply (methods, generateFilterValuesData, taskg),

, но получаю следующую ошибку: «Ошибка в lapply (методы, generateFilterValuesData, taskg): утверждение не выполнено. Должно применяться одно из следующих действий: * checkClass (task):Должен иметь класс ClassifTask, но имеет класс * 'character' * checkClass (task): Должен иметь класс 'RegrTask', но имеет класс 'character' * checkClass (task): Должен иметь класс 'SurvTask', но имеет класс 'персонаж '"

Я понимаю, что я делаю что-то не так, но я не могу найти, как выполнить эту итерацию над вектором" методов "(поскольку этот вектор содержит переменные значения для одного и того же аргумента, а не для данныхна котором должна применяться функция).

1 Ответ

0 голосов
/ 17 декабря 2018

Я думаю, что вы, возможно, ищете это (основываясь на вашем fv задании).

lapply(methods, function(m) generateFilterValuesData(taskg, method = m))

Когда вы делаете

lapply (methods, generateFilterValuesData, taskg)

, аргументы переключаются,Например, вы получаете ту же ошибку, если вы делаете

generateFilterValuesData(methods[1], taskg)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...