Excel IFERROR的R等价物是多少?

时间:2015-07-03 21:25:23

标签: r excel error-handling try-catch

我试图将IFERROR条件放在R中,就像Excel IFERROR函数一样。我正在构建一个随机森林模型。为了微调,我使用tuneRF功能。它有助于提供最佳的mtry参数。

#Selecting Optimal MTRY parameter
mtry <- tuneRF(dat3[, -36], dat3[,36], ntreeTry=1000, stepFactor=1.5,improve=0.01, trace=TRUE, plot=TRUE)
best.m <- mtry[mtry[, 2] == min(mtry[, 2]), 1]

有时,如果在不同的迭代中OOB错误没有改善,上面的函数会返回错误。

if(改进&gt;改进){:缺失值为TRUE / FALSE时出错 需要的。

下一步:如果上述功能正常,我在下面的代码中使用best.m的值。

tuneRF函数中没有错误 - 运行以下代码。

rf <-randomForest(classe~.,data=dat3, mtry=best.m, importance=TRUE,ntree=1000)

tuneRF函数中的错误 - 运行以下代码。

#Train Random Forest
rf <-randomForest(classe~.,data=dat3, importance=TRUE,ntree=1000)

感谢您的期待!任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:4)

您需要使用trytryCatch。这应该有效:

mtry <- try(tuneRF(dat3[, -36], dat3[,36], ntreeTry=1000,
  stepFactor=1.5,improve=0.01, trace=TRUE, plot=TRUE))
if (!inherits(mtry, "try-error")) {
  best.m <- mtry[mtry[, 2] == min(mtry[, 2]), 1]
  rf <- randomForest(classe~.,data=dat3, mtry=best.m, importance=TRUE,ntree=1000)
} else {
  rf <- randomForest(classe~.,data=dat3, importance=TRUE,ntree=1000)
}

但是,给出的错误可能代表tuneRF函数中的错误。你能给出一个可重复的例子,即用最小的数据集产生错误吗?

答案 1 :(得分:0)

R等同于Excel的ifERROR函数

try2 <- function(code, silent = FALSE) {
  tryCatch(code, error = function(c) {
    if (!silent) {"Error Message"}
    else{code}})}