从R包中提取源代码

4
我正在尝试安装r软件包sowas,但不幸的是它太老了,在新版本的r中无法实现。
根据作者的说法,您可以使用source()函数来访问代码,但我还没有弄清楚如何做到这一点。
非常感谢任何帮助。
这是一个链接到我描述的软件包,因为它不是CRAN软件包:http://tocsy.pik-potsdam.de/wavelets/

1
只需解压缩tar或zip归档文件并查看其内容,您将在子文件夹R中找到一些有趣的文件。 - Roland
1
我认为这个压缩文件是Windows版本的。如果你从这里下载Linux版本并解压,你就可以在R目录下看到代码。 - GSee
即使您加载了R代码,您仍需要一些方法来注册(甚至编译)src文件中的C代码。如何执行此操作将取决于您运行的操作系统等。 - Gavin Simpson
我确实查看了解压缩的包,但大多数文件都无法读取。正如所提到的,我相信代码需要编译成R代码。有人知道怎么做吗?我在Windows 7上运行R。 - Kevin
2个回答

4

.zip文件是Windows二进制文件,因此不会太有趣。您需要查看的是.tar.gz存档的内容。您可以提取这些内容,然后查看R子目录中的代码。

您还可以更新软件包以使其与新版本的R一起使用,以便您可以构建和安装软件包。要这样做,您可以像以前一样解压.tar.gz,但现在您需要添加一个NAMESPACE文件。这只是位于软件包目录顶部的纯文本文件,其格式如下:

export(createar)
export(createwgn)
export(criticalvaluesWCO)
export(criticalvaluesWSP)
export(cwt.ts)
export(plot.wt)
export(plotwt)
export(readmatrix)
export(readts)
export(rk)
export(wco)
export(wcs)
export(writematrix)
export(wsp)

如果您想要使用包中的任何函数,必须使用export语句进行导出。如果未导出函数,则包中的其他函数仍可以访问该函数,但用户无法轻松地使用它。一旦完成这些步骤,您就应该能够构建和安装该软件包。

我已经做了一些自由裁量。实际上,我还没有花时间找出哪些函数是有用的并且应该被导出,只是假定如果为该函数编写了帮助页面,则应该导出该函数;如果没有帮助页面,则不导出它。我使用Rd2roxygen将帮助页面转换为roxygen代码(因为我喜欢这样),然后进行了一些清理工作,但看起来安装很好。

因此,如果您已安装devtools包,则可以使用以下命令直接安装我修改后的版本。

library(devtools)
install_github("SOWAS", "Dasonk")

个人建议您直接添加NAMESPACE文件等,这样您将更能控制代码,并能更容易地解决使用软件包时可能出现的任何问题。或者,如果您使用git,可以fork我的repo并继续修复其中的问题。祝您好运。


2

如果你想看某个函数的源代码,只需输入该函数名称但不要带括号,按回车键即可查看代码。

例如,在命令提示符中输入“var”以查看它的代码。

> var
function (x, y = NULL, na.rm = FALSE, use) 
{
    if (missing(use)) 
        use <- if (na.rm) 
            "na.or.complete"
        else "everything"
    na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", 
        "everything", "na.or.complete"))
    if (is.na(na.method)) 
        stop("invalid 'use' argument")
    if (is.data.frame(x)) 
        x <- as.matrix(x)
    else stopifnot(is.atomic(x))
    if (is.data.frame(y)) 
        y <- as.matrix(y)
    else stopifnot(is.atomic(y))
    .Call(C_cov, x, y, na.method, FALSE)
}
<bytecode: 0x0000000008c97980>
<environment: namespace:stats>

仅仅在控制台中输入函数并不总是有效的。在控制台中输入来自stats包的'deviance'并不能得到源函数。 - simpson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接