【问题标题】:Looking into the predict function in R研究 R 中的预测函数
【发布时间】:2025-12-02 16:00:02
【问题描述】:

我正在尝试了解使用 R 包 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:

mispelled 的建议在 kernlab 包中的 ksvm 预测函数上运行良好,但似乎不适用于 e1071 包中的 svm。

它会抛出以下错误:

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

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

【问题讨论】:

    标签: r svm predict kernlab


    【解决方案1】:

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

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

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

    【讨论】:

    • 这适用于 kernlab 包,但不适用于 e1071。我已经更新了我的问题。