如何获取 R 中父目录的路径?我必须编写一个 R 脚本,该脚本从父目录中的目录获取输入并将数据输出到父文件夹中的另一个目录。所以,如果我能找到父文件夹的路径,那么我可以这样做。
7 回答
您可以使用dirname
ongetwd
提取除当前目录最顶层之外的所有内容:
dirname(getwd())
[1] "C:/Documents and Settings"
Actually dirname allows to go back to several parent folders
Path="FolderA/FolderB/FolderC/FolderD"
dirname(Path)
"FolderA/FolderB/FolderC"
dirname(dirname(Path))
"FolderA/FolderB"
And so on...
我假设您的意思是 R 工作目录的父目录?
最简单的解决方案大概如下。
wd <- getwd()
setwd("..")
parent <- getwd()
setwd(wd)
这将保存工作目录,将其更改为其父目录,在 中获取结果parent
,然后再次重置工作目录。这省去了处理根目录、主目录和其他特定于操作系统的功能的变幻莫测,这可能需要大量摆弄正则表达式。
可能这两个提示可能会有所帮助
"~/" # after the forward slash you "are" in your home folder
然后在窗户上
"C:/" # you are in your main hard drive
"G:/" # you are just in another hard drive :-)
在 unix 上你可以做类似的事情
"/etc/"
然后你可以进入你需要的任何子目录
或者正如@Hong Ooi 建议的那样,您可以使用
"../"
注意:在最后一次正斜杠按下之后tab
,您将拥有所有文件和文件夹,非常方便,尤其是在RStudio
另一种可能:
parts <- unlist(strsplit(getwd(), .Platform$file.sep))
do.call(file.path, as.list(parts[1:length(parts) - 1]))
这会将文件路径拆分为目录,删除最后一个目录,然后再次将部分重新组合到文件路径中。
您可以简单地使用".."
likeoutput_dir <- paste(input_dir, "..", "out", sep = .Platform$file.sep)
或使用fs
包 ( install.packages("fs")
):
input_dir <- "base/input"
parent_dir <- fs::path(input_dir, "..") # "base/input/.."
output_dir <- fs::path(input_dir, "..", "out") # "base/input/../out"
# to shorten the path (avoid "input/../") you could use `fs::normalize`:
fs::normalize(fs::path(input_dir, "..", "out")) # "base/out"
# in case input is a symlink and you want the parent directory of the target, look at `fs::real`
在 RStudio 中,您可以导航到您的代码目录和文件中的“设置为工作目录”。然后“..”将起作用。