读取R代码时读取roxygen2@importFrom



目标

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

包外的R函数如何来源&导入它所依赖的函数,就像在包中一样

reprex

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

gh_file.R是一个从GitHub存储库下载文件的R函数。它不是包的一部分,而是作为GitHub的要点提供的。

浏览一下roxygen2注释,就会发现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

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

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

相关内容

  • 没有找到相关文章

最新更新