簡體   English   中英

格式R包依賴項字符串

[英]format R package dependency strings

目標:列出某個軟件包的所有軟件包名稱-此處:“ ggplot2”

所需輸出:

c(digest, grDevices, grid, gtable, lazyeval, MASS, mgcv, reshape2, rlang, scales, stats, tibble, viridisLite, withr)

我非常接近:

pack <- available.packages()
p <- pack["ggplot2", c("Imports")]
p
"digest, grDevices, grid, gtable (>= 0.1.1), lazyeval, MASS,\nmgcv, reshape2, rlang (>= 0.3.0), scales (>= 0.5.0), stats,\ntibble, viridisLite, withr (>= 2.0.0)"

請參閱此處:在不安裝軟件包的情況下列出R軟件包依賴關系

接下來,我要替換版本號,例如“(> = 2.0.0)”

我的嘗試:

library(stringr)
res <- str_match_all(p, " ( (.*?) )")
res <- str_match_all(p, " [(] (.*?) [)]")

使用stringr您可以分割字符串並刪除括號(含),空格和換行符中的所有內容:

library(stringr)

str_remove_all(str_split(p, ",")[[1]], "\\(.*\\)|\\\n|\\s+")
[1] "digest"      "grDevices"   "grid"        "gtable"      "lazyeval"    "MASS"        "mgcv"        "reshape2"    "rlang"      
[10] "scales"      "stats"       "tibble"      "viridisLite" "withr"  

與基數R的邏輯相同:

gsub("\\(.*\\)|\\\n|\\s+", "", strsplit(p, ",", fixed = T)[[1]])

您可以將gsub()lapply()結合使用,如下所示:

res = unlist(lapply(p, function (i) gsub("\\(>= \\d\\.\\d\\.\\d\\)", '',i)))

這將給出以下輸出,該輸出是p,不包含版本:

> res
[1] "digest, grDevices, grid, gtable , lazyeval, MASS,\nmgcv, reshape2, rlang , scales , stats,\ntibble, viridisLite, withr "
> p
[1] "digest, grDevices, grid, gtable (>= 0.1.1), lazyeval, MASS,\nmgcv, reshape2, rlang (>= 0.3.0), scales (>= 0.5.0), stats,\ntibble, viridisLite, withr (>= 2.0.0)"

試試gsub

gsub("\\(>= \\d\\.\\d\\.\\d\\)", "", p)
#[1] "digest, grDevices, grid, gtable , lazyeval, MASS,\nmgcv, reshape2, rlang , 
#      scales , stats,\ntibble, viridisLite, withr "

但這會以單個字符串的形式返回輸出,如果您希望將其作為字符向量,我們可以使用逗號分割字符串

strsplit(gsub("\\(>= \\d\\.\\d\\.\\d\\)", "", p), ",")[[1]]

#[1] "digest"  " grDevices"   " grid"  " gtable"  " lazyeval"  " MASS"       
#[7] "\nmgcv"  " reshape2"    " rlang"       " scales"      " stats"  "\ntibble"    
#[13] " viridisLite" " withr"  

暫無
暫無

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

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