我正在尝试编写一个函数来完成一项特定的工作(在我的例子中,分析异常值的数据集),所以我想要做的第一件事就是看看其他人是如何完成类似的工作的.
我可以这样做来加载一个特定的包并检查一个函数的代码,但是一些函数似乎依赖于你抛出的对象类
>library(outliers) > fix(outlier) function (x, opposite = FALSE, logical = FALSE) { if (is.matrix(x)) apply(x, 2, outlier, opposite = opposite, logical = logical) else if (is.data.frame(x)) sapply(x, outlier, opposite = opposite, logical = logical) else { if (xor(((max(x) - mean(x)) < (mean(x) - min(x))), opposite)) { if (!logical) min(x) else x == min(x) } else { if (!logical) max(x) else x == max(x) } } }
你如何看待根据对象改变的代码?
编辑:
好吧,Palm < - 面子.我作为一个例子使用的函数只调用它自己,但是他的代码就在那里......我已经看到了其他的例子(但是不能想到任何随便的)函数确实做了其他事情,这取决于抛出的对象的类在它,所以问题,即使这是一个坏的例子!
我找到功能代码的思维过程往往是:
首先,键入函数的名称
案例1:它显示了代码好!你做完了.
示例:diag
情况2:该函数作为一行UseMethod语句出现你有一个S3方法.methods(fnname)
然后键入以查看可用方法getAnywhere(fnname.myclass)
.
示例:mean
methods(mean) getAnywhere(mean.default)情况3:该函数包含.Internal或.Primitive语句
该函数以C语言编写,以提高性能.下载R源代码的副本并解压缩tarball.在src目录中搜索函数名称.
编辑:您还可以使用谷歌或雅虎网站搜索搜索该文件.
site:https://svn.r-project.org/R/trunk/src functionname
结束编辑
示例:qnorm
在R源代码的src目录中搜索"qnorm"的简单窗口显示文件qnorm.c,其中包含函数定义.
编辑: qnorm.c也是搜索的最高结果
site:https://svn.r-project.org/R/trunk/src qnorm
结束编辑
案例4:仍然找不到功能它可能是S4类的一种方法.
输入class(myobj)
以查找班级.
键入showMethods(class="myclass")
以查找该类的可用方法.
类型getMethods("fnname", "myclass")
.
示例:plot pixmap
这需要pixmap包.
library(pixmap) pixie <- pixmap(1:12, nrow=3, ncol=4) class(pixie) #"pixmap" showMethods(class="pixmap") getMethod("plot", "pixmap")
当你说
该函数确实做了其他事情,具体取决于抛出它的对象的类
您已经处于S3调度机制的核心位置!因此,我建议您阅读R上的编程书籍,例如
(经典但过时)Venables/Ripley"S Programming",
绅士"生物信息学与R",
布朗/默多克"与R统计编程的第一个课程",
钱伯斯"数据分析软件:用R编程",
或者来自R书上的这个SO问题的其他资源以及来自丰富的CRAN包的一个或两个示例包.