Изменение порядка переменных во вложенной функции - PullRequest
0 голосов
/ 29 января 2020

Я бы хотел иметь переменный контроль над порядком передачи переменных в функцию. Лучше всего это проиллюстрировать на следующем примере:

Скажем, у нас есть следующая функция, в которой две переменные определены в локальном пространстве имен функции и переданы вложенной функции в этом пространстве имен:

testfunc = function(){

  a=1
  b=2

  return(sprintf('first %s, then %s', a,b))
}

Можно ли определить порядок переменных a и b, передаваемых sprintf?

Возможно, что-то вроде:

Моя попытка:

testfunc = function(...){

  a=1
  b=2

  return(sprintf('first %s, then %s', ...))
}

testfunc(...=b,a)

Очевидно, что вышесказанное не работает из-за синтаксических проблем ...

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 29 января 2020

Примерно так:

test <- function(ord) {
    l <- list(
        a = "x",
        b = "y"
    )
    args <- c(l[ord], fmt = "%s %s")
    do.call(sprintf, args)
}
test(c(1, 2))
#> [1] "x y"
test(c(2, 1))
#> [1] "y x"
test(c(1, 1))
#> [1] "x x"
test(c(2, 2))
#> [1] "y y"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...