问题 加速氧气


运行 R CMD roxygen 在大包装上可能需要相当长的时间。它显然是低效的,无论自上次roxygen调用后文件是否发生变化,它都会通过所有内容。

关于如何加快速度的任何提示?


4948
2018-01-20 15:29


起源



答案:


Roxygen2> 3.0.0大大加快,不再需要缓存。


在我当地的roxygen版本中,我有:

library(memoize)
cached.parse.ref <- memoize(parse.ref)
cached.parse.srcfile <- memoize(parse.srcfile)

parse.file <- function(file) {
  srcfile <- srcfile(file)

  res <- try(cached.parse.srcfile(srcfile), silent = TRUE)
  if (inherits(res, "try-error")) {
    stop("Can't pass", file, "\n", res, call. = FALSE)
  }
  res
}

parse.srcfile <- function(srcfile) {
  srcrefs <- attributes(parse(srcfile$filename,
                              srcfile=srcfile))$srcref
  if (length(srcrefs) > 0)
    parse.refs(zip.list(prerefs(srcfile, srcrefs), srcrefs))
  else
    nil

}

我认为这些是你需要的唯一变化,但我不确定。它加速了一个数量级的氧气。


12
2018-01-20 20:43



你的Roxygen分叉是否可以在GitHub上使用? - Sharpie
还没有 - 我仍然希望氧气的发展能够恢复生机。 - hadley
使用已禁用的问题跟踪器和声明您不是维护者并且将用户引导到Roxygen邮件列表的免责声明来发布它是不会有害的。增加的流量可以激励开发工作。 - Sharpie
点指出: github.com/hadley/roxygen - hadley
谢谢,下载了你的roxygen版本,确实要快得多。 - Dr G


答案:


Roxygen2> 3.0.0大大加快,不再需要缓存。


在我当地的roxygen版本中,我有:

library(memoize)
cached.parse.ref <- memoize(parse.ref)
cached.parse.srcfile <- memoize(parse.srcfile)

parse.file <- function(file) {
  srcfile <- srcfile(file)

  res <- try(cached.parse.srcfile(srcfile), silent = TRUE)
  if (inherits(res, "try-error")) {
    stop("Can't pass", file, "\n", res, call. = FALSE)
  }
  res
}

parse.srcfile <- function(srcfile) {
  srcrefs <- attributes(parse(srcfile$filename,
                              srcfile=srcfile))$srcref
  if (length(srcrefs) > 0)
    parse.refs(zip.list(prerefs(srcfile, srcrefs), srcrefs))
  else
    nil

}

我认为这些是你需要的唯一变化,但我不确定。它加速了一个数量级的氧气。


12
2018-01-20 20:43



你的Roxygen分叉是否可以在GitHub上使用? - Sharpie
还没有 - 我仍然希望氧气的发展能够恢复生机。 - hadley
使用已禁用的问题跟踪器和声明您不是维护者并且将用户引导到Roxygen邮件列表的免责声明来发布它是不会有害的。增加的流量可以激励开发工作。 - Sharpie
点指出: github.com/hadley/roxygen - hadley
谢谢,下载了你的roxygen版本,确实要快得多。 - Dr G