2015-09-01 7 views
3

Я пытаюсь понять, как работает функция предсказания SVM при использовании команды ksvm из пакета kernel kern.Заглядывая в функцию прогнозирования в R

Я попытался заглянуть в функцию предсказания с помощью следующих команд:

methods(class="ksvm") 
getAnywhere(ksvm:::predict) 

Однако я получаю следующий вывод, а не полный предсказать функцию:

A single object matching ‘:::’ ‘ksvm’ ‘predict’ was found 
It was found in the following places 
    package:base 
    namespace:base 
with value 

function (pkg, name) 
{ 
    pkg <- as.character(substitute(pkg)) 
    name <- as.character(substitute(name)) 
    get(name, envir = asNamespace(pkg), inherits = FALSE) 
} 
<bytecode: 0x00000000088be4f8> 
<environment: namespace:base> 
Warning message: 
In find(x, numeric = TRUE) : 
    elements of 'what' after the first will be ignored 

Может кто-то помочь с тем, как для получения полной функции предсказания?

Update 1:

Предложение от опечатка работали нормально предсказать функцию ksvm в kernlab упаковки, но не похоже на работу на SVM в пакете e1071.

Он выдает следующее сообщение об ошибке:

> getMethod("predict", "svm") 
Error in getMethod("predict", "svm") : 
    no generic function found for 'predict' 

В общем, как знать, какие получить метод использовать?

ответ

2

Вы были близки. Мне удалось получить код функции с getMethod("predict", "ksvm"). Этот ответ, описывающий отправку метода S4, был полезен. View source code for function

За обновленный вопрос, я могу получить исходный код для predict.svm, используя функцию :::. В частности, с e1071:::predict.svm. Ссылка выше также описывает это в разделе о отправке метода S3.

Здесь, по крайней мере, есть несколько вещей. Во-первых, в первом случае вы имеете дело с объектами S4 и объектами S3 в последнем. Эти две системы имеют разные способы отправки и различные способы просмотра исходного кода. Еще одна морщина заключается в том, что функция pred.svm является невидимой функцией и может быть просмотрена только с ::: или getAnywhere().

+0

Это отлично подходит для пакета kernlab, но не работает для e1071. Я обновил свой вопрос. – Ravi

+1

Обновлено за ваше обновление :) – misspelled