r - 如何在 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)
我相信在前几次迭代中设置的工作目录仍然永久设置为新目录以进行剩余迭代,因此未来的路径(参考旧目录)不起作用。
推荐阅读
- jenkins - 如何从rancher 2.0获取kubernete的配置?
- sql-server - 更改 Bool 时 SQL Server 调整计算
- uipath - uipath 编排器中的动态调度
- python - 替换字节数组中的字节以修复编码
- sabre - 如何将 Sabre 预订排入队列(现在预订并在特定时间之前创建 PNR)?
- angular - 使用 Rxjs 或任何东西在 Angular 中监听数据库数据变化
- svn - 如何检查 HEAD 和过去 10 天之间的 svn 日志
- google-cloud-platform - 单租户节点定价
- spring-data - 使用弹簧调度程序时如何在使用沙发底座时锁定文档
- powershell - Powershell copy-item:正在更改文件名