在Rscript下的R future框架中看不到函数参数

camsedfj  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(138)

我想使用包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")

有没有办法解决这个问题?

j0pj023g

j0pj023g1#

未来作者点击此处)
显然,在使用Rscript时,future::multisession()无法找到环境中指定的参数ncores。
我 * 不能 * 在Linux上用R 4.2.2重现这个问题。如果我把你的代码复制到test.R文件中并调用,我会得到:

$ Rscript test.R
[1] "Done"

FWIW,the recommended way to set the plan为:

plan(multisession, workers = ncores)

但我不确定这有什么区别。
也许你使用的是future的旧版本?你的sessionInfo()是什么?

相关问题