热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在R中调用包含逗号的函数?》经验,为你挑选了1个好方法。

在R中使用S3或S4类时,通常将类设置为泛型my_generic,然后对每个子类型使用点my_generic.my_type.最近,我一直在看这种模式,但使用逗号代替句点my_generic,my_type.问题是我无法使用帮助操作符?或在控制台中输入函数名称,因为逗号被视为错误.有解决方法吗?我尝试过使用反引号,但它不起作用.

这方面的一个例子是包中的draw方法ComplexHeatmap:

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,HeatmapAnnotation-method没有.



1> Joris Meys..:

首先,直接调用方法是非常糟糕的做法,特别是使用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, ...)
}


Signatures:
        object   
target  "Heatmap"
defined "Heatmap"

使用特定的S4方法(但不是真的)

您可以分配该调用的结果并将其用作函数:

mat = matrix(rnorm(80, 2), 8, 10)
mat = rbind(mat, matrix(rnorm(40, -2), 4, 10))
rownames(mat) = letters[1:12]
colnames(mat) = letters[1:10]

ht = Heatmap(mat)
myMethod <- getMethod(draw, signature = "Heatmap")

myMethod(ht)

但是你不应该试图直接调用方法.最后一次通话的结果完全相同

draw(ht)

所以你最好使用泛型函数,让调度完成它的工作.


@nachocab你是受欢迎的.我刚刚补充说明作为未来读者的警告.在我看到评论中提到`get`和`do.call`之后,我想确保人们不会认为直接调用S4方法甚至是远程智能的.对于S3,有些情况下需要调用方法而不是泛型,所以我可以想象人们想要尝试使用S4 :-)
推荐阅读
author-avatar
随意
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有