将字符列表传递给 R 中的 file.path

Passing list of characters into file.path in R

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

假设我有:"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"    

我想要 return:

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

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

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

我也有点困惑,为什么 strsplit return 是一个包含 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"

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

paste(parent_dir, collapse = "/")

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

dirname(getwd())

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

 users <- c("c:/users/A", "c:/users/B")
 strsplit(users, "/")

[[1]]
[1] "c:"    "users" "A"    

[[2]]
[1] "c:"    "users" "B"

对于环境,dir是一个字符array,有八个元素。