我试图在将来的处理器中更改工作目录,执行一些操作,然后退出。问题是我无法设置工作目录。
以下玩具示例可以正常工作
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])错误:无法更改工作目录
如何成功更改工作目录?
答案 0 :(得分:0)
我在玩脚本时想出了一个解决方案。
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工作目录对于其余的迭代仍会永久设置为新目录,因此将来的路径(参考旧目录)将不起作用。