Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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_Methods_S4 - Fatal编程技术网

如何调用R中包含逗号的函数?

如何调用R中包含逗号的函数?,r,methods,s4,R,Methods,S4,在R中使用S3或S4类时,通常会将一个类设置为genericmy\u generic,然后为每个子类型my\u generic.my\u type使用点。最近,我看到了这种模式,但使用逗号代替句点my\u generic,my\u type。问题是我不能使用帮助操作符?,也不能在控制台中输入函数名,因为逗号被视为错误。有解决办法吗?我试过用反勾,但不起作用 例如,ComplexHeatmap包中的draw方法: methods(draw) [1] draw.colorkey

在R中使用S3或S4类时,通常会将一个类设置为generic
my\u generic
,然后为每个子类型
my\u generic.my\u type
使用点。最近,我看到了这种模式,但使用逗号代替句点
my\u generic,my\u type
。问题是我不能使用帮助操作符
,也不能在控制台中输入函数名,因为逗号被视为错误。有解决办法吗?我试过用反勾,但不起作用

例如,
ComplexHeatmap
包中的
draw
方法:

methods(draw)
[1] draw.colorkey             draw.details       draw,HeatmapAnnotation-method 
[4] draw,HeatmapList-method draw,Heatmap-method      draw.key                      
draw,SingleAnnotation-method

?draw.colorkey
可以工作,但
?draw,Heatmap Annotation方法
不行。

首先,直接调用方法是非常糟糕的做法,尤其是对于S4。您看到的“带逗号的函数”实际上是S4方法

帮助页 要查找帮助页(如果存在),可以使用以下引号:

?"draw,Heatmap-method"
但成功并不是保证。这在很大程度上取决于包的作者是否有单独的方法帮助文件,或者是否使用了正确的别名。在本例中,您可以看到,在帮助页面
?draw
上,软件包的作者添加了两个指向特定方法的链接

查找所有S4方法 要了解所有S4方法,请使用
showMethods
而不是
methods

> library(ComplexHeatmap)
> showMethods("draw")
Function: draw (package ComplexHeatmap)
object="Heatmap"
object="HeatmapAnnotation"
object="HeatmapList"
object="SingleAnnotation"
请参阅方法的内部代码 要获取实际方法以便查看内部代码,请使用
getMethod

getMethod(draw, signature = "Heatmap")
Method Definition:

function (object, ...) 
{...
    }
    .local(object, ...)
}
<environment: namespace:ComplexHeatmap>

Signatures:
        object   
target  "Heatmap"
defined "Heatmap"

因此,您最好使用泛型函数,让分派完成它的工作。

首先,直接调用方法是非常糟糕的做法,尤其是对于S4。您看到的“带逗号的函数”实际上是S4方法

帮助页 要查找帮助页(如果存在),可以使用以下引号:

?"draw,Heatmap-method"
但成功并不是保证。这在很大程度上取决于包的作者是否有单独的方法帮助文件,或者是否使用了正确的别名。在本例中,您可以看到,在帮助页面
?draw
上,软件包的作者添加了两个指向特定方法的链接

查找所有S4方法 要了解所有S4方法,请使用
showMethods
而不是
methods

> library(ComplexHeatmap)
> showMethods("draw")
Function: draw (package ComplexHeatmap)
object="Heatmap"
object="HeatmapAnnotation"
object="HeatmapList"
object="SingleAnnotation"
请参阅方法的内部代码 要获取实际方法以便查看内部代码,请使用
getMethod

getMethod(draw, signature = "Heatmap")
Method Definition:

function (object, ...) 
{...
    }
    .local(object, ...)
}
<environment: namespace:ComplexHeatmap>

Signatures:
        object   
target  "Heatmap"
defined "Heatmap"

因此,您最好使用泛型函数,让调度完成它的工作。

可能是
?“draw,Heatmap Annotation method”
。那么
do.call()呢?文档说它应该和函数名一起工作。而且
help()
也可以处理字符串。@lmo谢谢!这很有效。但是,有没有一种方法可以访问函数代码,就像我在没有括号的情况下键入
draw.colorkey
一样?@lmo它说
找不到
,所以可能无法访问那些逗号方法。我想了解逗号约定代表什么可能是
?“绘制,热图注释方法”
。关于
do.call()
?文档说它应该和函数名一起工作。而且
help()
也可以处理字符串。@lmo谢谢!这很有效。但是,有没有一种方法可以访问函数代码,就像我在没有括号的情况下键入
draw.colorkey
一样?@lmo它说
找不到
,所以可能无法访问那些逗号方法。我想了解逗号惯例代表什么,谢谢!我的目标不是直接使用该方法,而是能够轻松地查看源代码code@nachocab不客气。我只是补充了这一点,作为对未来读者的警告。在我看到评论中提到了
get
do.call
之后,我想确保人们不会认为直接调用S4方法会非常聪明。在S3中,有一些情况下,调用方法而不是泛型是有必要的,所以我可以想象人们也希望在S4中尝试一下:-)基于@JorisMeys注释,也许也可以将问题的名称从“如何调用函数…”改为“如何引用函数…”非常好,谢谢!我的目标不是直接使用该方法,而是能够轻松地查看源代码code@nachocab不客气。我只是补充了这一点,作为对未来读者的警告。在我看到评论中提到了
get
do.call
之后,我想确保人们不会认为直接调用S4方法会非常聪明。对于S3,在某些情况下,调用方法而不是泛型是必要的,因此我可以想象人们也想用S4来尝试:-)根据@JorisMeys的评论,也许将问题的名称从“如何调用函数…”改为“如何引用函数…”也是明智的