- 参考:
- 六种方法查看R函数源代码,为啥第三种最惹人喜欢?- 简书 (jianshu.com)[1]
前言
最近正好在探索[[管中窥rpca(ReciprocalProject)]] 函数以及seurat 家族里其他函数的用法,借此机会来总结一下。
1-直接查看
其实非常粗暴,比如我想知道Seurat 中的某个方法,直接去掉这个函数对应的括号和参数即可(如果加载这个包到环境中,也可以直接通过函数名获取):
代码语言:javascript复制> Seurat::DimHeatmap
我可以直接输出到console 中。这里就并不展示了。之前我们说过,因为有的函数作者并没有写出给用户调用,这时候如果使用的话:
代码语言:javascript复制> Seurat::AnnoyNN
错误: 'AnnoyNN'不是'namespace:Seurat'内的出口对象:
这时候就需要使用:::
了:
> Seurat:::AnnoyNN
当然直接输出到console 太过原始,不便于我们去了解代码。
这里还可以利用sink 函数将输出的内容输出到指定的文件中,亦或是:
还可以在Rstudio 中通过F2 快捷键查看:
还可以用函数edit()。会自动调出一个编辑窗口,可以直接编辑函数并将结果赋值给新的变量,非常适合那些需要简单修改的函数:
代码语言:javascript复制a <- edit(Seurat::as.CellDataSet)
2-泛型函数
在R 的面向对象中还存在一类泛型函数,这里先不展开说了。它们通常是这样:
这类函数会根据对象的不同,调用不同的函数,可以通过methods 查看:
代码语言:javascript复制> methods(mean)
[1] mean,ANY-method mean,Matrix-method
[3] mean,sparseMatrix-method mean,sparseVector-method
[5] mean.Date mean.default
[7] mean.difftime mean.ecdf*
[9] mean.ewcdf* mean.IDate*
[11] mean.im* mean.ITime*
[13] mean.leverage.ppm* mean.POSIXct
[15] mean.POSIXlt mean.quosure*
[17] mean.vctrs_vctr* mean.yearmon*
[19] mean.yearqtr* mean.zoo*
see '?methods' for accessing help and source code
比如我们关心的是Date 对象的除了,就可以直接通过mean.Date
查看了。
但如果是*
的函数呢?
> mean.leverage.ppm*
> mean.leverage.ppm
错误: 找不到对象'mean.leverage.ppm'
R 不仅不能直接识别*,也不能删除后查看。
说明它和Seurat:::AnnoyNN
,是被隐藏起来的函数,我们需要通过getAnywhere(mean.leverage.ppm)
来查看,或者spatstat.core:::mean.leverage.ppm
同理。
3-网站查看
如果是github 上的包,直接查看对应的代码,如果是上传到cran 等,同样的操作:
没有什么是直接偷家搞不定的。
其他技巧
比如我会使用sink 函数来捕获函数的输出,保存在txt 文件中便捷阅读代码。
其实这里你也可以用
参考资料
[1]
六种方法查看R函数源代码,为啥第三种最惹人喜欢?- 简书 (jianshu.com): https://www.jianshu.com/p/ae68ae6c68dd