2012-08-03 56 views
0

我有一個程序包,並且正在爭論改變函數的代碼。我只想確定這會影響其他一切。我把它作爲github和本地回購的軟件包。我最初的想法是列出包中的所有函數(即使是沒有加載到名稱空間中的函數),然後將所有函數發送到控制檯。然後,我可以將代碼剪切並粘貼到文本編輯器中,並查找正在使用的此功能的實例。確保修改函數不會破壞程序包其餘部分的代碼

如果這個問題有一個簡單的解決方案,我不想重新發明輪子。如果我的方式似乎是最合理的,我仍然不知道如何做到這一點。

+1

我一直在試圖讓你現在使用testthat一段時間...這是測試的原因之一。 – Dason 2012-11-17 02:54:05

+0

同上單元測試。另外,RStudio具有類似於grep的功能,可以根據需要遞歸搜索目錄中的所有.R文件。所以沒有這個複製/粘貼廢話。 – 2012-11-17 02:59:39

+0

@Dason好吧,讓我們在'pacman'上烹飪吧,這樣你就可以向我展示繩索了:)阿里不知道這些。 – 2012-11-17 03:04:07

回答

7

這就是所謂的單元測試。雖然它不是靈丹妙藥(「你不能證明或測試正確性」)是有幫助的。

查看this page at the R Wiki的介紹。

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 
相關問題