未列为方法的r函数的非标准使用
在某些情况下,R函数在特定上下文中以非标准方式使用,这种方式没有作为方法列出或以不寻常的方式列出。例如,在公式中使用*并不是通常意义上的乘法,但是方法*[methods在其文档中提到,在您的例子中,您可以提供泛型函数,例如+,或者将函数名作为字符串。methods+似乎为我提供了正确的结果未列为方法的r函数的非标准使用,r,oop,methods,documentation,operator-overloading,R,Oop,Methods,Documentation,Operator Overloading,在某些情况下,R函数在特定上下文中以非标准方式使用,这种方式没有作为方法列出或以不寻常的方式列出。例如,在公式中使用*并不是通常意义上的乘法,但是方法*[methods在其文档中提到,在您的例子中,您可以提供泛型函数,例如+,或者将函数名作为字符串。methods+似乎为我提供了正确的结果 > methods("+") [1] +.Date +.POSIXt > library(ggplot2) > methods('+') [1] +.Date +.gg*
> methods("+")
[1] +.Date +.POSIXt
> library(ggplot2)
> methods('+')
[1] +.Date +.gg* +.POSIXt
您可以找到有关通用S3术语和过程的更多信息
加载ggplot2时,可以看到对+.gg*的引用。这意味着对于类gg的对象,+函数被重载。星号用于突出显示函数不可见。但是,当检查ggplot对象的类时,可以看到它确实是类“gg”的元素
> p <- ggplot(data.frame())
> class(p)
[1] "gg" "ggplot"
你的问题有点杂乱和不清楚。首先,你可以用help+搜索文档,但那只能找到泛型。然后,公式中的*不是函数。公式以特殊方式解析并记录在helpformula中。你必须问他为什么Hadley调用类gg。我也不知道为什么+。gg标记为a它不是通过方法导出的。这是一个有趣的问题。getAnywhere有特定的用途,但它不是用于查找方法。一般来说,如果你想研究高级的东西,就假定你的知识是高级的。@Roland是的,我可能不应该把+和*放在同一个问题中。如果公式*不是函数,那么你有办法找出它是什么类型的对象吗?通常的口号是在R中,一切都是对象,每个动作都是函数。公式组件是这个规则的例外,比如说,向量的片段不是不同的对象吗?最后,你知道有没有其他类的R对象没有特殊的内部解析规则作为方法记录?formula对象中的*是一个符号:f你研究过吗?如果你想了解R的内部工作,你需要研究该文档和R的源代码。我绝对不是专家,因为我对C的知识非常有限。两个问题:1.当你说加载后你可以看到参考资料s到+.GG,你是指::,还是其他什么?我看不到函数的帮助。2.星号约定是特殊的,还是R-wide?如果是后者,你可能知道它在哪里被记录了吗?@andrewH我的意思是,在加载ggplot2之后,你可以通过方法看到+.GG函数。当然:::也可以通过ggplot2:::“+.GG”工作。我不这么认为星号符号是R-wide。至少我在其他任何地方都没有见过它。@andrewH同样奇怪的是,methods+返回+.gg*,methodsclass=ggplot2返回+没有星号。这可能与R的内部优先级有关。R将首先检查base+函数是否可以处理它。如果类是hi未知的m、 他将把它重定向到正确的add操作。
> p <- ggplot(data.frame())
> class(p)
[1] "gg" "ggplot"
> getAnywhere('+.gg')
A single object matching ‘+.gg’ was found
It was found in the following places
registered S3 method for + from namespace ggplot2
namespace:ggplot2
with value
function (e1, e2)
{
e2name <- deparse(substitute(e2))
if (is.theme(e1))
add_theme(e1, e2, e2name)
else if (is.ggplot(e1))
add_ggplot(e1, e2, e2name)
}
<environment: namespace:ggplot2>