r - 确定为特定函数调用调度哪个方法

标签 r

我试图理解一些我没有写的代码(mgcv 中的 plot.gam),并且有一个对 plot() 的调用带有一些我不认识的奇怪参数的函数(例如,“P”)。我想弄清楚在这个调用中正在调度哪个 plot 方法。 findMethod()和类似的功能无济于事(我认为情节是 S3 )。我尝试了调试库,但这不会让您“步入”函数调用(基本调试函数也不行)。

有没有办法监视 R 中的所有函数调用及其关联的方法调度?或者也许是一个函数,我可以向它传递一个包含实际函数调用(不仅仅是签名)的字符串,它会告诉我什么方法被调度?

最佳答案

plot.gam()我们注意到 plot()被调用 x$smooth[[i]] ,这是一个类的对象:

class(x$smooth[[i]])
[1] "tprs.smooth" "mgcv.smooth"

有一个plot()类的方法 "mgcv.smooth"在一般情况下,这就是用于情节的。 ?plot.gam提到这是用于大多数平滑的默认方法,但对于某些类型的平滑,gam() 支持特定的方法。 (来自 ?plot.gam 的详细信息部分:

For smooth terms ‘plot.gam’ actually calls plot method functions
depending on the class of the smooth. Currently random effect and
Markov random field smooths have special methods, the rest use the
defaults described below.


出于某种原因,methods()没有找到这些方法,但它们确实存在:
> mgcv:::plot.mgcv.smooth
function (x, P = NULL, data = NULL, label = "", se1.mult = 1, 
    se2.mult = 2, partial.resids = FALSE, rug = TRUE, se = TRUE, 
    scale = -1, n = 100, n2 = 40, pers = FALSE, theta = 30, phi = 30, 
    jit = FALSE, xlab = NULL, ylab = NULL, main = NULL, ylim = NULL, 
    xlim = NULL, too.far = 0.1, shade = FALSE, shade.col = "gray80", 
    shift = 0, trans = I, by.resids = FALSE, scheme = NULL, ...) 
{
....

这可能与 methods() 中的错误有关这意味着 plot.function未显示在列表中,我当前的 R 可能没有包含该修复程序。这个方法应该正常显示,在这种情况下的一般建议是识别对象的类(如我上面所示),然后使用 methods()和类似的函数(例如 showMethods() )来确定是否有特定方法可用于返回的对象的类。

关于r - 确定为特定函数调用调度哪个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195628/

相关文章:

r - 防止 NA 用于 lm 回归

r - 如何在 `knit` 与 `fig.keep=' all 一起指定图形名称'`

r - 有没有办法将 chemarr 的 latex 表达式用于 `gitbook` 格式的 bookdown 包?

r - 从 Perl 中的数组中概率抽样

arrays - 为什么 `x[0]` 返回零长度向量?

r - 在不指定开始和结束日期的情况下将 .xts 强制转换为 .ts

r - 使用lapply中的特定列计算多个回归分析

r - 在 quantmod saveChart 函数中使用自定义文件名

带 print 的 R Sys.sleep 在 while 循环中不起作用

r - 查找大于列表中每个元素的最小值