【问题标题】:format R package dependency strings格式化 R 包依赖字符串
【发布时间】:2020-01-14 08:53:56
【问题描述】:

目标:列出某个包的所有包名 - 这里:“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)"

请看这里:Listing R Package Dependencies Without Installing Packages

接下来我想替换版本号,例如"(>= 2.0.0)"

我尝试了什么:

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

【问题讨论】:

  • 有点不清楚...对于ggplot2 的情况,您的预期输出是什么?
  • 你可以像这样使用 gtools,如果我理解正确的话,gtools::getDependencies('ggplot2')

标签: r


【解决方案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)"

【讨论】:

    【解决方案2】:

    使用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]])
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-14
        • 2015-09-19
        • 2015-11-22
        • 2012-10-24
        • 2022-11-18
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多