Передать аргументы фоновому процессу 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

Источник: здесь

Другие вопросы по тегам