确保更改函数不会破坏其余软件包中的代码

时间:2012-08-03 19:59:20

标签: r

我有一个包,我正在讨论改变函数的代码。我想但是要确定这会影响其他一切。我把它作为github上的一个包和一个本地回购。我最初的想法是列出包中的所有函数(甚至是未在命名空间中加载的函数),然后是一些如何将所有函数发送到控制台。然后我可以将代码剪切并粘贴到文本编辑器中,并查找正在使用的函数的实例。

如果能够轻松解决这个问题,我不想重新发明轮子。如果我的方式似乎是最合理的,我仍然不知道如何使这种情况发生。

2 个答案:

答案 0 :(得分:7)

它被称为单元测试。虽然它不是灵丹妙药(“你无法证明或测试正确性”),但却有很大帮助。

请参阅this page at the R Wiki了解相关信息。

答案 1 :(得分:0)

这是查看哪些函数受其影响或包含其他函数的相当快速的方法。最近,我发现在使用导入时我在包函数内部不需要requirelibrary。因此,我使用该软件包的函数termco.a查看了我的软件包,以查找libraryrequire的事件。第一部分传递包R目录的路径,逐行读入每个文件。然后termoco.a对事件进行计数,并使用索引仅返回包含这些项的那些函数。您必须下载软件包qdap的测试版。

安装qdap

library(devtools)
install_github("qdap", "trinker")

查找条款:

WD <- getwd()
setwd("C:/Users/trinker/GitHub/qdap/R/")
m <- sapply(dir(), readLines)
n <- do.call(rbind, lapply(seq_along(m), function(i){
    data.frame(fun=rep(names(m)[i], length(m[[i]])), text=m[[i]])
}))

x <- with(n, termco.a(text, fun, qcv(require, library)))
x$raw[rowSums(x$raw[, -c(1:2)]) > 0, ]

输出:

> x$raw[rowSums(x$raw[, -c(1:2)]) > 0, ]
                   fun word.count require library
1   adjacency_matrix.R        198       0       1
59         formality.R        954       2       0
112            qprep.R        145       4       4
116  read.transcript.R        563       1       1
144         termco.a.R        614       1       0
146         termco.d.R        535       1       0
156      trans.cloud.R        928       5       0