Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未列为方法的r函数的非标准使用_R_Oop_Methods_Documentation_Operator Overloading - Fatal编程技术网

未列为方法的r函数的非标准使用

未列为方法的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*

在某些情况下,R函数在特定上下文中以非标准方式使用,这种方式没有作为方法列出或以不寻常的方式列出。例如,在公式中使用*并不是通常意义上的乘法,但是方法*[methods在其文档中提到,在您的例子中,您可以提供泛型函数,例如+,或者将函数名作为字符串。methods+似乎为我提供了正确的结果

> 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>