【问题标题】:Passing list of characters into file.path in R将字符列表传递到 R 中的 file.path
【发布时间】:2020-05-27 04:36:14
【问题描述】:

我想从文件夹路径中获取父目录。

假设我有:“C:/Users/YS/2020 projects/APP/pect/PDC/src”

我想得到:“C:/Users/YS/2020 projects/APP/pect/PDC”

#Get current directory
cpath = getwd()

#Remove last folder from path
dir <- strsplit(cpath,"/")
dir <- dir[[1]]
parent_dir <- dir[1:length(dir)-1]

#Return file path
file.path(parent_dir)

这些是我的环境变量:

这是我从代码中得到的输出:

[1] "C:"            "Users"         "YS"            "2020 projects" "APP"           "pect"          "PDC"    

我希望它返回:

[1] "C:/Users/YS/2020 projects/APP/pect/PDC"

为什么我不能将字符列表传递给 file.path()?

我对环境变量中的 dir 如何被列为字符而不是列表或向量感到有些困惑

我也有点困惑,为什么 strsplit 返回一个包含 1 个值的列表?

【问题讨论】:

    标签: r file directory path parent


    【解决方案1】:

    如果我们想删除“src”,一个选项是sub

    sub("[/][a-z]+$", "", cpath)
    

    如果我们要使用file.path,用法在哪里

    file.path(..., fsep = .Platform$file.sep)

    ... 表示多个参数一一传递,即

    file.path(parent_dir[1], parent_dir[2])
    #[1] "C:/Users"
    

    等等

    parent_dir
    #[1] "C:"            "Users"         "YS"            "2020 projects" "APP"           "pect"          "PDC"         
    

    如果我们想复制它,一个选项是将它放在list 中,并使用file.pathdo.call

    do.call(file.path, as.list(parent_dir))
    #[1] "C:/Users/YS/2020 projects/APP/pect/PDC"
    

    或者Reduce

    Reduce(file.path, as.list(parent_dir))
    #[1] "C:/Users/YS/2020 projects/APP/pect/PDC"
    

    【讨论】:

    • 我的主要问题是,如何将字符串列表输入到 file.path 中?
    • 如果您对答案感兴趣,我试图回答您的主要问题
    • 谢谢!我正在寻找 do.call 我的问题措辞不是很好,我正在寻找一种从 python 列表中解压缩参数的方法。我在这里发现了一个关于堆栈溢出的类似问题/回复:stackoverflow.com/questions/3414078/…
    • R 中,没有*** 用于此目的
    【解决方案2】:

    将数组作为输入传递,它将函数分别应用于每个元素。可能需要将paste 与数组一起使用。

    paste(parent_dir, collapse = "/")
    

    另一种可能更简单的方法:

    dirname(getwd())
    

    strsplit 返回列表的原因是它可以处理多个输入:

     users <- c("c:/users/A", "c:/users/B")
     strsplit(users, "/")
    
    [[1]]
    [1] "c:"    "users" "A"    
    
    [[2]]
    [1] "c:"    "users" "B"
    

    对于环境,dir 是具有八个元素的字符 array

    【讨论】:

    • 谢谢!这非常有用。我正在寻找像 dirname() 这样的命令
    猜你喜欢
    • 2021-12-11
    • 2014-02-04
    • 2012-10-06
    • 1970-01-01
    • 2021-02-20
    • 2017-09-17
    • 1970-01-01
    • 2013-11-13
    • 2018-08-13
    相关资源
    最近更新 更多