在R中了解predict函数

3

我想了解在使用R包kernlab中的命令ksvm时,SVM predict函数是如何工作的。

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

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:

misspelled 的建议对 kernlab 包中 ksvm 的预测函数有效,但在 e1071 包中的 svm 上似乎无效。

它会抛出以下错误:

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

通常来说,如何知道使用哪个get方法?

1个回答

2
你接近了答案。我可以使用 getMethod("predict", "ksvm") 获取函数代码。这篇讲述 S4 方法分发的回答很有帮助。 查看函数源代码 根据你更新的问题,我可以使用 ::: 函数获取 predict.svm 的源代码。具体来说是使用 e1071:::predict.svm。上面的链接还在 S3 方法分发部分描述了这一点。
这里至少有几件事情要处理。首先,在前一个例子中,你正在处理 S4 对象和后者中的 S3 对象。这两个系统具有不同的方法分发和不同的查看源代码的方式。另一个问题是 predict.svm 函数是一个不可见的函数,只能使用 :::getAnywhere() 查看。

这对于kernlab包很好用,但对于e1071无效。我已经更新了我的问题。 - Ravi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接