阅读 R 代码时阅读 roxygen2 @importFrom
read roxygen2 @importFrom when reading R code
目标
我想将 R 函数读取到环境中,并将其导入 roxygen2 在线文档中列出的依赖函数。这模仿了加载 R 包的行为,但是对于 不是 包的一部分的 R 脚本也是如此。
如何获取包外的 R 函数并像在包中一样导入它所依赖的函数?
代表
示例 R 函数(不是包的一部分)
gh_file.R
是一个从 GitHub 存储库下载文件的 R 函数。它不是包的一部分,而是作为 GitHub gist.
提供
看一眼 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)))
returns 错误:
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")
目标
我想将 R 函数读取到环境中,并将其导入 roxygen2 在线文档中列出的依赖函数。这模仿了加载 R 包的行为,但是对于 不是 包的一部分的 R 脚本也是如此。
如何获取包外的 R 函数并像在包中一样导入它所依赖的函数?
代表
示例 R 函数(不是包的一部分)
gh_file.R
是一个从 GitHub 存储库下载文件的 R 函数。它不是包的一部分,而是作为 GitHub gist.
看一眼 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)))
returns 错误:
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")