我有一個程序包,並且正在爭論改變函數的代碼。我只想確定這會影響其他一切。我把它作爲github和本地回購的軟件包。我最初的想法是列出包中的所有函數(即使是沒有加載到名稱空間中的函數),然後將所有函數發送到控制檯。然後,我可以將代碼剪切並粘貼到文本編輯器中,並查找正在使用的此功能的實例。確保修改函數不會破壞程序包其餘部分的代碼
如果這個問題有一個簡單的解決方案,我不想重新發明輪子。如果我的方式似乎是最合理的,我仍然不知道如何做到這一點。
我有一個程序包,並且正在爭論改變函數的代碼。我只想確定這會影響其他一切。我把它作爲github和本地回購的軟件包。我最初的想法是列出包中的所有函數(即使是沒有加載到名稱空間中的函數),然後將所有函數發送到控制檯。然後,我可以將代碼剪切並粘貼到文本編輯器中,並查找正在使用的此功能的實例。確保修改函數不會破壞程序包其餘部分的代碼
如果這個問題有一個簡單的解決方案,我不想重新發明輪子。如果我的方式似乎是最合理的,我仍然不知道如何做到這一點。
這就是所謂的單元測試。雖然它不是靈丹妙藥(「你不能證明或測試正確性」)是有幫助的。
查看this page at the R Wiki的介紹。
這是查看哪些功能受到影響或包含其他功能的相當快速的方式。最近,我發現在使用導入時,我不需要包函數中的require
或library
。因此,我使用該軟件包的功能termco.a
查看包裹,查找library
或require
的事件。第一部分傳遞包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
我一直在試圖讓你現在使用testthat一段時間...這是測試的原因之一。 – Dason 2012-11-17 02:54:05
同上單元測試。另外,RStudio具有類似於grep的功能,可以根據需要遞歸搜索目錄中的所有.R文件。所以沒有這個複製/粘貼廢話。 – 2012-11-17 02:59:39
@Dason好吧,讓我們在'pacman'上烹飪吧,這樣你就可以向我展示繩索了:)阿里不知道這些。 – 2012-11-17 03:04:07