我所在的组织拥有许多内部 R 包,这些包都是多年前编写的。这些文件存储为.zip在 R 3.x 下的 Windows 上构建的存档。它们无法在不重新构建的情况下加载到 Linux 或 macOS 或 R 4.y 下。不幸的是,我无权访问包源。他们输给了时间……
我想获取这些二进制文件,提取源代码,并根据当前的最佳实践(版本控制、roxygen2、testthat等)重新打包它。最好的方法是什么?
我已经通过以下方式解决了其中一个二进制文件:
.R文件。.R文件中,以便重现浏览器中显示的帮助页面。我部分陷入(1),因为某些功能是 S4 通用的。dput(<name>)给出new("standardGeneric", ...)而不是简单的function定义。否则,这个过程相当简单,但非常耗时。
有没有办法以编程方式从 R 包二进制文件“反向工程”源文件,同时正确处理 S4 通用函数、类和方法?
在这个问题得到解决之前,组织中的每个人都将停留在 R 3.6 上。
如何将对象通过管道传输到apply调用中的特定位置(这不是第一个输入)?点占位符magrittr似乎对此不起作用。
dat <- 1:10
locs <- list(c(1, 2),
c(3, 4),
c(5, 6))
foo <- function(x, y, z) {
out <- mean(c(x[y], x[z]))
return(out)
}
# works
lapply(locs, function(z) foo(dat, z[1], z[2]))
# none of these work
dat %>%
lapply(locs, function(z) foo(., z[1], z[2]))
dat %>%
lapply(locs, function(z) foo((.), z[1], z[2]))
dat %>%
lapply(locs, function(z) {. %>% foo(z[1], z[2])})
# New native pipe and placeholder also do not work
dat |>
lapply(locs, function(z) foo(_, z[1], z[2]))
Run Code Online (Sandbox Code Playgroud)