当前位置:  开发笔记 > 编程语言 > 正文

如何检查R中对象类敏感的函数的代码

如何解决《如何检查R中对象类敏感的函数的代码》经验,为你挑选了2个好方法。

我正在尝试编写一个函数来完成一项特定的工作(在我的例子中,分析异常值的数据集),所以我想要做的第一件事就是看看其他人是如何完成类似的工作的.

我可以这样做来加载一个特定的包并检查一个函数的代码,但是一些函数似乎依赖于你抛出的对象类

>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> Richie Cotto..:

我找到功能代码的思维过程往往是:

首先,键入函数的名称

案例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")



2> Dirk Eddelbu..:

当你说

该函数确实做了其他事情,具体取决于抛出它的对象的类

您已经处于S3调度机制的核心位置!因此,我建议您阅读R上的编程书籍,例如

(经典但过时)Venables/Ripley"S Programming",

绅士"生物信息学与R",

布朗/默多克"与R统计编程的第一个课程",

钱伯斯"数据分析软件:用R编程",

或者来自R书上的这个SO问题的其他资源以及来自丰富的CRAN包的一个或两个示例包.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有