Передать аргументы фоновому процессу callr::r() и получить к ним доступ внутри?
Код R можно запустить в фоновом процессе, например так
callr::r(function(){ 2 * 2 })
# [1] 4
Когда я пытаюсь сделать это с помощью
args
Я не могу понять, как получить к ним доступ. Я попробовал несколько очевидных вещей:
callr::r(function(){ 2 * 2 }, args = list(x=3))
callr::r(function(){ 2 * x }, args = list(x=3))
callr::r(function(){ 2 * args$x }, args = list(x=3))
callr::r(function(){
args <- commandArgs()
2 * args$x
},
args = list(x=3))
# Error: callr subprocess failed: unused argument (x = base::quote(3))
# Type .Last.error.trace to see where the error occurred
Я также пытался отлаживать с помощью
browser()
но в данном случае это не сработало обычным способом.
Вопрос
Как можно передать аргументы фоновому процессу, вызванному с помощью
callr::r()
и эти аргументы будут доступны в фоновом процессе?
1 ответ
Вы должны переместить аргумент как внутри списка аргументов, так и внутри функции(), например:
callr::r(function(x){ 2 * x }, args = list(x = 3))
# [1] 6
Или вот так:
x <- 3
callr::r(function(x){ 2 * x }, args = list(x))
# [1] 6
Та же идея для нескольких аргументов:
x <- 3
y <- 4
z <- 5
callr::r(function(x, y, z) { 2 * x * y * z }, args = list(x, y, z))
# [1] 120
Источник: здесь