在 R 中使用异步期货附加全局 table
Appending a global table using asynchronous futures in R
我正在尝试创建一个由异步 运行 并行进程生成的全局 table。它们是完全独立的,但是它们应该附加到同一个全局变量(这在 R shiny 中是反应性的,所以我要么需要一个回调函数,一旦所有的期货都完成了他们的任务——这会很好,但我不知道怎么做-,或者我需要随着新结果的出现不断更新 table)。
我尝试了以下只是锁定的方法(可能是因为所有进程都分配给同一个变量,当我将 'a' 更改为 'b' 时它有效但结果无用)
library("listenv")
library("future")
plan(multiprocess)
futureVals <- listenv()
options(future.globals.onMissing = "ignore")
a<-0
b<-0
for(i in 1:5){
futureVals[[i]] <- futureAssign(x='a', value={
a <- a+1
print(a)
})
}
futureVals2 <- as.list(futureVals)
print(a)
我怎样才能实现这个目标?
未来(或其他并行的后台 R 工作者)不可能 为主 R 进程中的变量赋值。任何结果都需要作为值返回。这是 R 中所有 parallel/asynchronous 处理的基础 属性。(*)
说到这里,您可能会对 https://rstudio.github.io/promises/articles/shiny.html 感兴趣。
PS。 (*) 您对 futureAssign()
的期望似乎不正确。
我正在尝试创建一个由异步 运行 并行进程生成的全局 table。它们是完全独立的,但是它们应该附加到同一个全局变量(这在 R shiny 中是反应性的,所以我要么需要一个回调函数,一旦所有的期货都完成了他们的任务——这会很好,但我不知道怎么做-,或者我需要随着新结果的出现不断更新 table)。
我尝试了以下只是锁定的方法(可能是因为所有进程都分配给同一个变量,当我将 'a' 更改为 'b' 时它有效但结果无用)
library("listenv")
library("future")
plan(multiprocess)
futureVals <- listenv()
options(future.globals.onMissing = "ignore")
a<-0
b<-0
for(i in 1:5){
futureVals[[i]] <- futureAssign(x='a', value={
a <- a+1
print(a)
})
}
futureVals2 <- as.list(futureVals)
print(a)
我怎样才能实现这个目标?
未来(或其他并行的后台 R 工作者)不可能 为主 R 进程中的变量赋值。任何结果都需要作为值返回。这是 R 中所有 parallel/asynchronous 处理的基础 属性。(*)
说到这里,您可能会对 https://rstudio.github.io/promises/articles/shiny.html 感兴趣。
PS。 (*) 您对 futureAssign()
的期望似乎不正确。