2015-11-20 69 views
1

是否有可能從編譯後的R包中找到包到R源代碼?我想從CRAN或其他來源安裝的軟件包中獲取各種功能的源代碼。我知道我可以通過單獨的下載下載完整的源代碼。可能反編譯R字節碼?

+0

是不是操作系統依賴?另外,對我來說,超級用戶將是一個更好的網站來問這樣的問題 – 2015-11-20 01:01:30

+0

我想在Windows上比在* nix上甚至在OSX上更復雜。 – 2015-11-20 01:06:07

+2

當然不容易。我會好奇的看看是否有人想出答案。 –

回答

2

您可以使用args()body()提取包中函數的文本。要列出軟件包中的所有對象,可以使用ls()並指定軟件包環境。

警告:下面的方法會給你的源代碼,但不是NAMESPACEDESCRIPTION

例如,要打印所有的源代碼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 
}