[英]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.