如何遍历一个参数,对相同数据应用相同功能

时间:2018-12-17 14:48:05

标签: r arguments iteration mlr

“ 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'“

我意识到我做错了什么,但是我无法找到如何在“方法”向量上执行此迭代的步骤(因为该向量包含同一参数的不同值,而不是函数所基于的数据)被应用)。

1 个答案:

答案 0 :(得分:0)

我认为您可能正在寻找这个(基于您的fv分配)。

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

这样做的时候

lapply (methods, generateFilterValuesData, taskg)

参数正在切换。例如,如果执行此操作,则会得到相同的错误

generateFilterValuesData(methods[1], taskg)