1
是否有可能從編譯後的R包中找到包到R源代碼?我想從CRAN或其他來源安裝的軟件包中獲取各種功能的源代碼。我知道我可以通過單獨的下載下載完整的源代碼。可能反編譯R字節碼?
是否有可能從編譯後的R包中找到包到R源代碼?我想從CRAN或其他來源安裝的軟件包中獲取各種功能的源代碼。我知道我可以通過單獨的下載下載完整的源代碼。可能反編譯R字節碼?
您可以使用args()
和body()
提取包中函數的文本。要列出軟件包中的所有對象,可以使用ls()
並指定軟件包環境。
警告:下面的方法會給你的源代碼,但不是NAMESPACE
或DESCRIPTION
。
例如,要打印所有的源代碼ggplot2
,試試這個:
library(ggplot2)
pkg <- as.environment("package:ggplot2")
allfuns <- ls(envir = pkg)
for(f in allfuns[1:2]){
args <- capture.output(print(args(f)))[1]
body <- paste(capture.output(print(body(f))), collapse = "\n")
cat(sprintf("%s <- %s\n%s\n\n", f, args, body))
}
這會給你:
%+% <- function (e1, e2)
{
e2name <- deparse(substitute(e2))
if (is.theme(e1))
add_theme(e1, e2, e2name)
else if (is.ggplot(e1))
add_ggplot(e1, e2, e2name)
}
%+replace% <- function (e1, e2)
{
if (!is.theme(e1) || !is.theme(e2)) {
stop("%+replace% requires two theme objects", call. = FALSE)
}
e1[names(e2)] <- e2
e1
}
是不是操作系統依賴?另外,對我來說,超級用戶將是一個更好的網站來問這樣的問題 – 2015-11-20 01:01:30
我想在Windows上比在* nix上甚至在OSX上更復雜。 – 2015-11-20 01:06:07
當然不容易。我會好奇的看看是否有人想出答案。 –