【问题标题】:generate path from absolute and relative paths in R从R中的绝对路径和相对路径生成路径
【发布时间】:2022-01-05 13:55:55
【问题描述】:

是否有一种快速而可靠的方法可以从R 中的绝对路径和相对路径的混合中生成绝对路径?

更具体地说,我寻找一个可以(稳健地)解释 ../ 运算符并返回“递归”跟随绝对路径的函数,例如:

rel_path_1 <- "../../path1/path2/"
rel_path_2 <- "../final/"
abs_path <- "/home/username/foo/bar/glarb/zorb"

my_function(abs_path, rel_path_1)
# "/home/username/foo/bar/path1/path2/

my_function(abs_path, rel_path_2)
# "/home/username/foo/bar/glarb/final/

my_function(abs_path, rel_path_1, rel_path_2)
# "/home/username/foo/bar/glarb/path1/final/

我想过用正则表达式和计数路径分隔符和../ 运算符来截断 ens,但我担心结果会不太稳定。

【问题讨论】:

    标签: r filepath


    【解决方案1】:

    您真正在寻找的是路径规范化。 R 包 {fs} 做得很好。但您也可以使用 base R。这是您的示例,这两种解决方案都适用。

    rel_path_1 <- "../../path1/path2/"
    rel_path_2 <- "../final/"
    abs_path <- "/home/username/foo/bar/glarb/zorb"
    
    # using base R. mustWork = FALSE because the example uses non existent paths
    normalizePath(file.path(abs_path, rel_path_1), mustWork = FALSE)
    #> [1] "C:\\home\\username\\foo\\bar\\path1\\path2"
    
    # using R package fs
    fs::path_norm(fs::path(abs_path, rel_path_1))
    #> /home/username/foo/bar/path1/path2
    

    reprex package 创建于 2022-01-05 (v2.0.1)

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 2013-07-14
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2014-05-07
      相关资源
      最近更新 更多