我想使用包future和它的兄弟包future. apply来并行执行一系列操作。我可以成功地交互运行所有操作,但是考虑到数据的大小,我想使用Rscript
。在正常的RStudio会话中运行下面的代码不会引发任何错误,我对它很满意。
library(future)
ncores = 10
# define the number of workers
plan(future::multisession(workers = ncores))
print("Done")
#> [1] "Done"
由reprex package(v2.0.1)于2023年1月19日创建
显然,当使用Rscript
时,future::multisession()
无法找到环境中指定的参数ncores
。我以为Rscript
查看的是脚本所在的相同环境,但可能我错了。因此,如果我使用RStudio中的"Background Jobs"选项卡并尝试执行相同的代码,我会得到以下错误:
Error in tweak.future(function (..., workers = availableCores(), lazy = FALSE, :
object 'ncores' not found
Calls: sourceWithProgress ... eval -> plan -> do.call -> <Anonymous> -> tweak.future
Execution halted
我仍然认为这个问题与multisession()
查看的环境有关。经过几次尝试,似乎environment()
就是我要查找的环境。正如您所看到的,如果我打印定义的对象,ncores
就在那里,但是...同样的错误。
library(future)
ncores = 10
print(ls(environment()))
# define the number of workers
plan(future::multisession(workers = ncores, envir = environment()))
print("Done")
有没有办法解决这个问题?
1条答案
按热度按时间j0pj023g1#
(未来作者点击此处)
显然,在使用Rscript时,future::multisession()无法找到环境中指定的参数ncores。
我 * 不能 * 在Linux上用R 4.2.2重现这个问题。如果我把你的代码复制到
test.R
文件中并调用,我会得到:FWIW,the recommended way to set the plan为:
但我不确定这有什么区别。
也许你使用的是future的旧版本?你的
sessionInfo()
是什么?