【问题标题】:Create folder using relative paths in R使用 R 中的相对路径创建文件夹
【发布时间】:2020-09-28 14:14:49
【问题描述】:

我想创建一个相对于我当前目录的数据文件夹,即我想上移一个文件夹,然后下移另一个文件夹(和子文件夹)并创建一个文件夹。

dir.create 不起作用,因为它要么只创建指定文件夹的最后一部分,要么(在设置 recursive = TRUE 时)将开始在工作目录的根目录中创建文件夹。

我正在为这个(据说)简单的任务而苦苦挣扎。有什么帮助吗?

这是我使用的代码和我得到的错误:

dir.create("../04 Data/Data downloads/new folder")

Warning message:
In dir.create(download_folder) :
  cannot create dir '..\04 Data\Data downloads\new folder', reason 'No such file or directory'

假设这是我当前的工作目录:

"C:/Users/USERNAME/Project/Subfolder/07 R" 现在我想创建以下文件夹:

"C:/Users/USERNAME/Project/Subfolder/04 Data/Data downloads/new folder"我该怎么做?

【问题讨论】:

  • R 使用与 unix 相同的约定,.. 指的是“上一层”文件夹,因此您要创建的文件夹是 dir.create("../04 Data/Data downloads/new folder")
  • 这正是对我不起作用的地方。收到此错误:Warning message: In dir.create(download_folder) : cannot create dir '..\04 Data\Data downloads\new folder', reason 'No such file or directory'
  • 啊,你应该把你试过的代码和你得到的警告放在问题中 - 这是非常有用的信息。
  • 在我的系统 (Windows) 上,dir.create("../test") 工作时。如果test1 不存在,dir.create("../test1/test2") 会给我你的警告。 dir.create("../test1/test2", recursive = TRUE)。你在什么系统上?你确定..recursive = TRUE 不起作用吗?
  • 好吧,我很困惑。使用recursive= TRUE,它现在可以工作了。不要问我为什么以及我做了什么不同(我没有更改代码中的任何内容),但之前它创建的文件夹如下:"C:/Users/USERNAME/Project/04 Data/Data downloads/new folder",所以它忽略了“子文件夹”。

标签: r path directory-structure


【解决方案1】:

recursive = TRUE 用于处理至少一个父目录可能不存在的情况。

没有它,实际上正在发生的事情是这样的:

p <- "../04 Data/Data downloads/new folder"
dirname(p)
# [1] "../04 Data/Data downloads"
if (!dir.exists(dirname(0))) stop("nope")

而使用recursive = TRUE,它可以有效地做到这一点:

p <- "../04 Data/Data downloads/new folder"
paths <- character(0)
while (nzchar(p) && p != ".") { paths <- c(p, paths); p <- dirname(p); }
paths
# [1] ".."                                  
# [2] "../04 Data"                          
# [3] "../04 Data/Data downloads"           
# [4] "../04 Data/Data downloads/new folder"

for (path in paths) if (!dir.exists(path)) dir.create(path)

这应该总是成功(除非父目录之一实际上是一个文件,或者如果您没有权限)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多