我正在尝试编写一个函数来完成一项特定的工作(在我的例子中,分析异常值的数据集),所以我想要做的第一件事就是看看其他人是如何完成类似的工作的.
我可以这样做来加载一个特定的包并检查一个函数的代码,但是一些函数似乎依赖于你抛出的对象类
>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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
你如何看待根据对象改变的代码?
编辑:
好吧,Palm < - 面子.我作为一个例子使用的函数只调用它自己,但是他的代码就在那里......我已经看到了其他的例子(但是不能想到任何随便的)函数确实做了其他事情,这取决于抛出的对象的类在它,所以问题,即使这是一个坏的例子!
Ric*_*ton 32
我找到功能代码的思维过程往往是:
首先,键入函数的名称
案例1:它显示了代码好!你做完了.
示例:diag
情况2:该函数作为一行UseMethod语句出现你有一个S3方法.methods(fnname)然后键入以查看可用方法getAnywhere(fnname.myclass).
示例:mean
methods(mean)
getAnywhere(mean.default)
Run Code Online (Sandbox Code Playgroud)
情况3:该函数包含.Internal或.Primitive语句
该函数以C语言编写,以提高性能.下载R源代码的副本并解压缩tarball.在src目录中搜索函数名称.
编辑:您还可以使用谷歌或雅虎网站搜索搜索该文件.
site:https://svn.r-project.org/R/trunk/src functionname
Run Code Online (Sandbox Code Playgroud)
结束编辑
示例:qnorm
在R源代码的src目录中搜索"qnorm"的简单窗口显示文件qnorm.c,其中包含函数定义.
编辑: qnorm.c也是搜索的最高结果
site:https://svn.r-project.org/R/trunk/src qnorm
Run Code Online (Sandbox Code Playgroud)
结束编辑
案例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")
Run Code Online (Sandbox Code Playgroud)
当你说
该函数确实做了其他事情,具体取决于抛出它的对象的类
您已经处于S3调度机制的核心位置!因此,我建议您阅读R上的编程书籍,例如
或者来自R书上的这个SO问题的其他资源以及来自丰富的CRAN包的一个或两个示例包.
| 归档时间: |
|
| 查看次数: |
13038 次 |
| 最近记录: |