Неизвестное использование функций в исходном коде метода gnast.naiveBayes в пакете e1071

Я не понимаю, как работает метод realt.naiveBayes, если есть два неправильных использования функций, то есть isnumeric [attribs [v]] и islogical [attribs [v]].

На мой взгляд, должны быть is.numeric(attribs[v]) и is.logical (attribs [v]), соответственно.

Код ниже:

...
L <- sapply(1:nrow(newdata), function(i) {
    ndata <- newdata[i, ]
        L <- log(object$apriori) + apply(log(sapply(seq_along(attribs),
            function(v) {
                nd <- ndata[attribs[v]]
                if (is.na(nd)) rep(1, length(object$apriori)) else {
                  prob <- if (isnumeric[attribs[v]]) {
                    msd <- object$tables[[v]]
                    msd[, 2][msd[, 2] <= eps] <- threshold
                    dnorm(nd, msd[, 1], msd[, 2])
                  } else object$tables[[v]][, nd + islogical[attribs[v]]]
                  prob[prob <= eps] <- threshold
                  prob
                }
            })), 1, sum)
        if (type == "class")
            L
        else {
            ## Numerically unstable:
            ##            L <- exp(L)
            ##            L / sum(L)
            ## instead, we use:
            sapply(L, function(lp) {
                1/sum(exp(L - lp))
            })
        }
    })
... 

Все работает нормально, когда я использую наивный байесовский классификатор из пакета, но это довольно странно из-за этих несоответствий. Кто-нибудь может объяснить мне мои сомнения?

1 ответ

Всего две строки над отрывком кода - это то, что вы ожидаете:

isnumeric <- sapply(newdata, is.numeric)
islogical <- sapply(newdata, is.logical)

То есть, isnumeric а также islogical не являются функциями, они являются корректно определенными логическими векторами.

Другие вопросы по тегам