Использование external () с помощью функцииpren () - PullRequest
1 голос
/ 13 января 2010

Я пытаюсь использовать функцию external с предсказывать в некотором классификационном коде в R. Для простоты в этом посте мы предположим, что у нас есть два вектора с именем альфа и бета каждая содержит ТОЛЬКО 0 и 1. Я ищу простой, но эффективный способ передачи всех комбинаций альфа и бета в предсказать .

Я сконструировал приведенный ниже код для имитации функции lda из библиотеки MASS, поэтому вместо «lda» я использую «классификатор». Важно отметить, что метод прогнозирования в пределах Forecast зависит от пары ( alpha , beta ).

Конечно, я мог бы использовать для этого вложенный цикл for, но я пытаюсь избежать этого метода.

Вот что я хотел бы сделать в идеале:

alpha <- seq(0, 1)
beta <- seq(0, 1)
classifier.out <- classifier(training.data, labels)
outer(X=alpha, Y=beta, FUN="predict", classifier.out, validation.data)

Это проблема, потому что alpha и beta не являются первыми двумя параметрами в Foret .

Итак, чтобы обойти это, я изменил последнюю строку на

outer(X=alpha, Y=beta, FUN="predict", object=classifier.out, data=validation.data)

Обратите внимание, что мои данные проверки имеют 40 наблюдений, а также что есть 4 возможных пары альфа и бета . Я получаю сообщение об ошибке

dims [product 4] do not match the length of object [40]

Я пробовал несколько других вещей, некоторые из которых работают, но далеко не простые. Есть предложения?

Ответы [ 2 ]

3 голосов
/ 13 января 2010

Проблема состоит в том, что external ожидает, что его функция будет векторизована (то есть он вызовет предикат ONCE с вектором всех аргументов, которые он хочет выполнить). Поэтому, когда предикат вызывается один раз, возвращая его результат (длина которого равна 4), внешние жалуются, потому что он не равен ожидаемым 40.

Один из способов исправить это - использовать Vectorize. Непроверенный код:

outer(X=alpha, Y=beta, FUN=Vectorize(predict, vectorize.args=c("alpha", "beta")), object=classifier.out, data=validation.data)
0 голосов
/ 13 января 2010

Я нашел один достойный способ сделать это. Вот оно:

pairs <- expand.grid(alpha, beta)
names(pairs) <- c("alpha", "beta")
mapply(predict, pairs$alpha, pairs$beta, 
    MoreArgs=list(object=classifier.out, data=validation.data))

У кого-нибудь есть что-нибудь попроще и эффективнее? Я очень хочу знать, потому что я потратил слишком много времени на эту проблему. (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...