研究R

时间:2015-09-01 12:01:06

标签: r svm predict kernlab

我试图了解当使用R package kernlab中的命令ksvm时SVM预测函数如何工作。

我尝试使用以下命令查看预测函数:

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

有人可以帮助学习如何获得完整的预测函数吗?

更新1:

来自拼错的建议在kernlab包中对ksvm的预测函数工作正常但在e1071包中似乎不适用于svm。

它会抛出以下错误:

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

一般来说,如何知道使用哪种get方法?

1 个答案:

答案 0 :(得分:2)

你很亲密。我能够使用getMethod("predict", "ksvm")获取功能代码。这个描述S4方法调度的答案很有帮助。 View source code for function

根据您更新的问题,我可以使用predict.svm函数获取:::的源代码。特别是e1071:::predict.svm。上面的链接也在S3方法调度一节中描述了这一点。

这里至少有几件事情要发生。首先,在前一种情况下,您正在处理后者中的S4对象和S3对象。这两个系统具有不同的方法分派和查看源代码的不同方式。另一个问题是predict.svm函数是一个不可见的函数,只能用:::getAnywhere()来查看。