我是R的新编程,但我正在尝试学习并行计算和使用foreach。
Altough,在我的情况下,我需要循环组合,找到最佳MAPE和与之相关的最佳变量。
我开始做嵌套for循环,但是有180k行并且试图找到3个变量的最佳组合,它连续运行了2天并且它没有停止。
这个代码只适用于2个变量,但我认为你可以理解逻辑。
for (i in names(df3)) {
for (j in names(df3)) {
name4 = names(df3["DiasAusencia"])
if (i != name4 && j != name4 && i != j) {
df4 = df3[, c(i, j, "DiasAusencia")]
H = holdout(df4$DiasAusencia, ratio = 2 / 3)
Fi = fit(DiasAusencia ~ ., df4[H$tr,], model = "svm")
testDf = df4[H$ts,]
P = predict(Fi, testDf)
MAE = mmetric(testDf$DiasAusencia, P, metric = "MAE")
MAPE = mmetric(testDf$DiasAusencia, P, metric = "MAPE")
res = cbind(testDf, predicted = P, MAE, MAPE)
if (MAPE < BESTMAPE) {
BESTMAPE = MAPE
bestres = res
}
}
}
}
所以我查看了foreach文档并尝试将其应用于此问题,因此我可以运行所有可能的组合,但到目前为止没有成功。这是我的foreach代码:
svm3 = function(var1, var2){
if (var1 != name4 && var2 != name4 && var1 != var2) {
df4 = df3[, c(var1, var2, "DiasAusencia")]
H = holdout(df4$DiasAusencia, ratio = 2 / 3)
Fi = fit(DiasAusencia ~ ., df4[H$tr,], model = "svm")
testDf = df4[H$ts,]
P = predict(Fi, testDf)
MAE = mmetric(testDf$DiasAusencia, P, metric = "MAE")
MAPE = mmetric(testDf$DiasAusencia, P, metric = "MAPE")
res = cbind(testDf, predicted = P, MAE, MAPE)
return(MAPE)
}
}
sol = foreach(i=1:ncols, j=1:ncols, .combine = rbind, .packages="rminer")%dopar%{
var1 = names(df3[i])
var2 = names(df3[j])
name4 = names(df3["DiasAusencia"])
svm3(var1, var2)
tmp = matrix(MAPE, ncol = ncols)
return(tmp)
}
这是我得到的错误
{:任务1失败 - &#34;对象&#39; MAPE&#39;找不到&#34;
希望你们能帮我解决这个问题!
提前谢谢。
答案 0 :(得分:0)
您未将svm3
的回报分配给任何内容:
svm3(var1, var2)
tmp = matrix(MAPE, ncol = ncols)
所以上面第二行没有任何名为MAPE
的内容。
MAPE = svm3(var1, var2)
应该修复它。