如何在一个R会话中创建多个临时目录?

7

我需要在单个R会话期间创建多个临时目录,但每次调用tempdir()函数时都得到相同的目录。

有没有简单的方法来确保每次调用都会给我一个新的临时目录?


1
创建临时目录的子目录是否可行?如果是,您可以执行 dir.create(paste0(tempdir(), "/1"))dir.create(paste0(tempdir(), "/2")) 等操作。 - prosoitos
tempdir 返回预会话临时目录 - 我认为只能有一个。也许在 tempdir() 中创建临时子目录,然后使用 tempfile 访问它们? - kangaroo_cliff
2个回答

9
使用 dir.create(tempfile()) 来创建一个独特命名的目录,位于 R 临时目录中。如有需要,请重复操作。

3

你只能拥有一个临时目录。但是你可以在其中创建子目录,然后使用这些子目录。

如果你想自动创建这些子目录(而不是手动命名它们),你可以使用:

if(dir.exists(paste0(tempdir(), "/1"))) {
  dir.create(paste0(
    tempdir(), paste0(
      "/", as.character(as.numeric(sub(paste0(
        tempdir(), "/"
      ),
      "", tail(list.dirs(tempdir()), 1))) + 1))))
} else {
  dir.create(paste0(tempdir(), "/1"))
}

这个表达式将把第一个子目录命名为1,并以每次+1的方式对后续子目录进行命名(因此是23等等)。

这样就不需要跟踪您已经创建了多少个子目录,您可以在函数等中使用此表达式。


谢谢你的回答。看起来这是正确的方法。然而,使用这种显式解决方案,我需要跟踪最终目录索引的全局状态,以便能够始终创建一个新的目录。你认为有没有办法使它更通用?这样,对于具有此逻辑的某个函数的调用总是有效? - Michal
我更新了我的答案,使其自动工作,无需跟踪索引或手动命名子目录。 - prosoitos
1
这比必要的要复杂得多。请看我的答案。 - Hong Ooi
确实... 哈哈 - prosoitos

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