【问题标题】:read roxygen2 @importFrom when reading R code读取 R 代码时读取 roxygen2 @importFrom
【发布时间】:2018-07-12 13:13:57
【问题描述】:

目标

我想将一个 R 函数读入环境中,并将它的依赖函数导入 roxygen2 内联文档中列出的函数。这模拟了加载 R 包的行为,但对于 包一部分的 R 脚本会这样做。

如何获取包外的 R 函数并导入它所依赖的函数,就像包中发生的那样?

代表

示例 R 函数(不是包的一部分)

gh_file.R 是一个从 GitHub 存储库下载文件的 R 函数。它不是包的一部分,而是以GitHub gist 的形式提供。

看一眼 roxygen2 cmets 就知道gh_file.R 应该从其他包导入几个函数。

#' @importFrom gh gh
#' @importFrom stringi stri_match_all_regex
#' @importFrom purrr %||% keep
#' @importFrom base64enc  base64decode

尝试读取 + 导入依赖函数

# read in the R function from GitHub Gist
library(devtools)
devtools::source_gist("gist.github.com/noamross/73944d85cad545ae89efaa4d90b049db",
                      filename = "gh_file.R")

# attempt to use new R function to import a .csv file from GitHub (FAILS)
ghurl <- "github.com/wpetry/RockyMountainAphids/blob/master/Palmer1952hostlist.csv"
aphids <- read.csv(text = readBin(gh_file(url = ghurl, to_disk = FALSE)))

返回错误:

Error in stri_match_all_regex(url, "(github\\.com/)?([^\\/]+)/([^\\/]+)/[^\\/]+/([^\\/]+)/([^\\?]+)") : 
could not find function "stri_match_all_regex"

期望的行为(需要加载 R 函数导入的所有包)

# load packages from which gh_file.R function imports
library(gh)
library(stringi)
library(purrr)
library(base64enc)

aphids <- read.csv(text = readBin(gh_file(url = ghurl, to_disk = FALSE), "character"))
head(aphids)

有效!

              host host_common               aphid
1   Abies concolor   White Fir     Cinara curvipes
2   Abies concolor   White Fir Cinara occidentalis
3 Abies lasiocarpa  Alpine Fir     Cinara curvipes
4 Abies lasiocarpa  Alpine Fir  Cinara lasiocarpae
5 Abies lasiocarpa  Alpine Fir Cinara occidentalis
6 Abies lasiocarpa  Alpine Fir  Mindarus abietinus

【问题讨论】:

  • 这里的问题到底是什么?
  • 我已经编辑添加了一个明确的问题。 roxygen2 cmets如何解析导入包外的函数?

标签: r devtools roxygen2


【解决方案1】:

您可以解析脚本以获取库列表,然后加载它们。

loadlib <- function(fpath) {
    l <- readLines(fpath)
    libs <- lapply(strsplit(l[grepl("@import", l)], " "), `[[`, 3)
    lapply(libs, library, character.only=TRUE)
}

loadlib("gh_file.R")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多