“ 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")
我想在taskg任务上迭代地应用函数“ generateFilterValuesData”,从而改变方法(即,对18种方法进行迭代)。我尝试了如下lapply:
lapply (methods, generateFilterValuesData, taskg),
但出现以下错误:“ lapply(方法,generateFilterValuesData,taskg)错误: 断言失败。必须满足以下条件之一: * checkClass(task):必须具有类“ ClassifTask”,但具有类 *'字符' * checkClass(task):必须具有类“ RegrTask”,但具有类“ character” * checkClass(task):必须具有类'SurvTask',但具有类'character'“
我意识到我做错了什么,但是我无法找到如何在“方法”向量上执行此迭代的步骤(因为该向量包含同一参数的不同值,而不是函数所基于的数据)被应用)。
答案 0 :(得分:0)
我认为您可能正在寻找这个(基于您的fv
分配)。
lapply(methods, function(m) generateFilterValuesData(taskg, method = m))
这样做的时候
lapply (methods, generateFilterValuesData, taskg)
参数正在切换。例如,如果执行此操作,则会得到相同的错误
generateFilterValuesData(methods[1], taskg)