我正在尝试编写一个函数来完成特定的工作(在我的例子中,分析数据集是否存在异常值),因此我想做的第一件事就是看看其他人是如何完成类似的工作的。
我可以这样做来加载特定的包并检查函数的代码,但有些函数似乎取决于您向其抛出的对象类
>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)
}
}
}
如何查看根据对象而变化的代码?
编辑:
好的,手掌<-脸。我用作示例的函数只是调用自身,但所有代码都在那里......我看过其他示例(但想不出任何临时的),其中函数确实根据抛出的对象的类执行其他操作就这样,问题依然存在,尽管这是一个坏例子!
最佳答案
我查找函数代码的思维过程往往是:
首先,输入函数的名称
情况1:显示代码太好了,你已经完成了。
示例:诊断
情况 2:该函数作为一行 UseMethod 语句出现您有一个 S3 方法。
输入 methods(fnname)
查看可用的方法,
然后getAnywhere(fnname.myclass)
。
示例:平均值
methods(mean)
getAnywhere(mean.default)
情况 3:函数包含 .Internal 或 .Primitive 语句
该函数是用 C 编写的,以提高性能。 下载 R 源代码的副本并解压缩 tarball。 在 src 目录中搜索函数名称。
编辑:您还可以使用 Google 或 Yahoo 网站搜索来搜索该文件。
site:https://svn.r-project.org/R/trunk/src functionname
结束编辑
示例:qnorm
在 R 源代码的 src 目录中简单地在 Windows 中搜索“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")
。
示例:绘制像素图
这需要 pixmap 包。
library(pixmap)
pixie <- pixmap(1:12, nrow=3, ncol=4)
class(pixie) #"pixmap"
showMethods(class="pixmap")
getMethod("plot", "pixmap")
关于function - 如何检查 R 中对象类敏感函数的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439348/