小编hok*_*bot的帖子

从编译的二进制版本“反向工程”R 包

我所在的组织拥有许多内部 R 包,这些包都是多年前编写的。这些文件存储为.zip在 R 3.x 下的 Windows 上构建的存档。它们无法在不重新构建的情况下加载到 Linux 或 macOS 或 R 4.y 下。不幸的是,我无权访问包源。他们输给了时间……

我想获取这些二进制文件,提取源代码,并根据当前的最佳实践(版本控制、roxygen2testthat等)重新打包它。最好的方法是什么?

我已经通过以下方式解决了其中一个二进制文件:

  1. 手动将加载的命名空间中的对象(导出和内部函数、数据集等)的源代码复制到新.R文件。
  2. 手动将 Roxygen 块添加到.R文件中,以便重现浏览器中显示的帮助页面。

我部分陷入(1),因为某些功能是 S4 通用的。dput(<name>)给出new("standardGeneric", ...)而不是简单的function定义。否则,这个过程相当简单,但非常耗时。

有没有办法以编程方式从 R 包二进制文件“反向工程”源文件,同时正确处理 S4 通用函数、类和方法?

在这个问题得到解决之前,组织中的每个人都将停留在 R 3.6 上。

r r-package

12
推荐指数
1
解决办法
580
查看次数

`magrittr` 通过管道传入 apply

如何将对象通过管道传输到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)

r pipe magrittr tidyverse

6
推荐指数
2
解决办法
109
查看次数

标签 统计

r ×2

magrittr ×1

pipe ×1

r-package ×1

tidyverse ×1