繁体   English   中英

将字符列表传递到 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"    

我希望它返回:

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

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

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

我也有点困惑为什么 strsplit 返回一个包含 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返回一个列表的原因是它可以处理多个输入:

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

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

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

对于环境, dir是一个有 8 个元素的字符array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM