【问题标题】:Making sure altering a function doesn't break code in rest of package确保更改函数不会破坏包其余部分的代码
【发布时间】:2012-08-03 19:59:20
【问题描述】:

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

如果这个问题有简单的解决方案,我不想重新发明轮子。如果我的方式看起来是最合理的,我仍然不知道如何实现。

【问题讨论】:

  • 我一直在努力让你使用 testthat 有一段时间了......这是测试的原因之一。
  • 单元测试也是如此。此外,RStudio 有一个类似 grep 的功能,可以搜索目录中的所有 .R 文件,如有必要,递归搜索。所以这些复制/粘贴都不是废话。
  • @Dason 好吧,让我们在 pacman 上做饭,这样你就可以给我看绳子了:) Ari 不知道。
  • @TylerRinker 我完全添加了……昨天 27 行代码……而且 pacman 中已经有一些测试。你可以开始添加一些,如果你愿意,我可以给你反馈。

标签: r


【解决方案1】:

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

有关介绍,请参阅this page at the R Wiki

【讨论】:

    【解决方案2】:

    这是查看哪些函数受其他函数影响或包含其他函数的一种相当快速的方法。最近,我发现在使用导入时我不需要 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多