在R中将字符列表传递给file.path函数

3
我想从文件夹路径中获取父文件夹的目录。
比如说我有: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)

这些是我的环境变量:

enter image description here

这是代码的输出结果:

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

I want it to return:

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

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

我有点困惑,我的环境变量中的dir列出的是一个字符而不是一个列表或向量。

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

2个回答

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中,并使用do.callfile.path
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中? - Pythonner12
如果您对答案感兴趣,您的主要问题我已经尝试回答了。 - akrun
谢谢!我一直在寻找do.call。我的问题表述得不太清楚,我想要的是一种类似于Python中解包参数列表的方法。我在Stack Overflow上找到了一个类似的问题/回答:https://dev59.com/hXA75IYBdhLWcg3wOGPS - Pythonner12
1
在R中,没有***来实现那个目的。 - akrun

1

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

paste(parent_dir, collapse = "/")

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

dirname(getwd())
< p > strsplit 返回一个列表的原因是它可以处理多个输入:

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

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

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

对于环境而言,dir 是一个由八个元素组成的字符 数组


谢谢!这非常有用。我一直在寻找像dirname()这样的命令。 - Pythonner12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接