簡體   English   中英

讀取R代碼時讀取roxygen2 @importFrom

[英]read roxygen2 @importFrom when reading R code

目標

我想將R函數讀入環境並將其依賴的函數導入roxygen2內聯文檔中列出。 這模仿了加載R包的行為,但對於屬於包的R腳本則這樣做。

如何在包外部獲取R函數並導入包中所依賴的R函數?

代表

示例R函數(不包含在包中)

gh_file.R是一個R函數,可從GitHub存儲庫下載文件。 它不是包的一部分,而是作為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)))

返回錯誤:

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM