繁体   English   中英

如何在R中的异步期货中更改工作目录

[英]How to change working directory in asynchronous futures in R

我试图在将来的处理器中更改工作目录,执行一些操作,然后退出。 问题是我无法设置工作目录。

以下玩具示例效果很好

library(future)
dirNames <- as.character(c(1:4))
sapply(dirNames, function(x) if(!dir.exists(x)) dir.create(x))
plan(multiprocess, workers=2)
b <- list()

for(i in seq_along(dirNames)){
  sleeptime <- 10
  if(i > 3) sleeptime <- 50
  a <- future({
    # setwd(dirNames[i])
    Sys.sleep(sleeptime)
    return(2)
  })
  print(i)
  b[[dirNames[i]]] <- a
}
lapply(b, resolved)
lapply(b[1:2], value)
lapply(b, value)

但是,如果我取消注释第11行,则在运行代码时出现以下错误

setwd(dirNames [i])中的错误:无法更改工作目录

如何成功更改工作目录?

我在研究脚本时找到了解决方案。

library(future)
dirNames <- as.character(c(1:4))
sapply(dirNames, function(x) if(!dir.exists(x)) dir.create(x))
plan(multiprocess, workers=2)
b <- list()

for(i in seq_along(dirNames)){
  sleeptime <- 10
  if(i > 3) sleeptime <- 50
  a <- future({
    currDir <- getwd()
    on.exit(setwd(currDir))
    setwd(dirNames[i])
    Sys.sleep(sleeptime)
    return(2)
  })
  print(i)
  b[[dirNames[i]]] <- a
}
lapply(b, resolved)
lapply(b[1:2], value)
lapply(b, value)

我相信在前几次迭代中设置的worker工作目录将永久设置为新目录,以进行剩余的迭代,因此将来的路径(参考旧目录)将不起作用。

暂无
暂无

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

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