我为一个拥有许多年前创建的内部包的组织工作。这些文件的形式是在WindowsonR 3.x上编译的package档案。因此,它们不能安装在R 4.x上,也不能在Mac或Linux上使用,除非重新编译。因此,整个组织中的每个人都被困在R 3.6上,直到这个问题得到解决。我无法访问原始的包源文件。他们迷失了时间..。
我想获取这些包,提取代码和数据,并为现代最佳实践(roxygen、GitHub repos、testthat等)更新它们。做这件事最好的方法是什么?我有相当多的包装开发经验。我已经解决了其中一个问题。我启动了一个新的RStudio包项目,并逐函数运行函数,将函数代码复制到一个新的脚本文件中,将帮助从帮助浏览器中获取并重新格式化为roxygen文档。对于我可以找到的任何内部隐藏函数(主要是通过pkg_name::: ),以及内部数据集,我都做了同样的工作。这一切都相当简单,但非常耗时。它构建得很好,但我还没有测试代码的实际功能。
我目前陷入困境,因为定制的standardGeneric类对象有几个S4方法函数。我完全不熟悉这些,并没有能够找到如何复制他们。将它们包装在new()中的源代码作为第一个参数(加上更明显的参数),而不仅仅是所有其他函数的简单function定义。任何帮助如何重新或复制这些将是非常欢迎的。
但也许我一开始就走错路了。我还没有找到任何有用的建议,如何从编译版本中“备份”R包源文件。
有什么想法吗?
发布于 2021-11-15 02:55:08
检查一下这在R 3.6中是否有效。
下面的脚本可以通过将所有函数源写入单独和适当命名的.R文件来自动化至少部分问题。此代码还将处理隐藏的函数。
提取码
# Use your package name
package_name <- "dplyr"
# Extract all method names, including hidden
nms <- paste(lsf.str(paste0("package:", package_name), all.names = TRUE))
# Loop through the method names,
# extract head and body, and write them to R files
for (i in 1:length(nms)) {
# Extract name
nm <- nms[i]
# Extract head
hd_raw <- capture.output(args(nms[i]))
# Collapse raw output, but drop trailing NULL
hd <- paste0(hd_raw[-length(hd_raw)], collapse = "\n")
# Extract body, collapse
bd <- paste0(capture.output(body(nms[i])), collapse = "\n")
# Write all to file
write(paste0(hd, bd), file = paste0(nm, ".R"))
}提取帮助文件
要以类似的方式提取函数的帮助文本,可以使用以下代码来回答:
纯文本的Get the documentation of an R function from the help as a string
起点可以是这样的:
library(tools)
package_name <- "dplyr"
db <- Rd_db(package_name)
# Extract all method names, including hidden
nms <- paste(lsf.str(paste0("package:", package_name), all.names = TRUE))
# Loop through the method names,
# extract Rd contents if they exist in this namespace,
# and write them to new Rd files
for (i in 1:length(nms)) {
# Extract name
nm <- nms[i]
rd_raw <- db[names(db) %in% paste0(nm, ".Rd")]
if (length(rd_raw) > 0) {
rd <- paste0(capture.output(rd_raw), collapse = "\n")
# Write all to file
write(rd, file = paste0(nm, ".Rd"))
}
}https://stackoverflow.com/questions/69930661
复制相似问题