l oop над выражениями без кавычек, данными для функции в R - PullRequest
1 голос
/ 28 апреля 2020

Допустим, мне нужна функция, которая печатает все выражения, которые ей даны:

> foo(abc(def),gh[i],j)
abc(def)
gh[i]
j

Я хочу знать, есть ли хороший способ сделать это. Я разработал, как сделать это с помощью рекурсии:

foo <- function(x, ...) {
    if (!is.missing(x)) {
        print(substitute(x))
        foo(...)
    }
}

Но я чувствую, что должен быть лучший способ, используя al oop или, возможно, какой-то способ использования list () и lapply () или что-то.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Оказывается, есть несколько способов добиться этого. Я думаю, что я собираюсь использовать это:

foo <- function(...) {
    for (expr in as.list(sys.call()[-1])) {
        print(expr)
    }
}

Альтернативный способ сделать то же самое:

as.list(substitute({...})[-1])

Другая альтернатива, без необходимости [-1] :

eval(substitute(expression(...)))
1 голос
/ 28 апреля 2020

Вы можете использовать специальный синтаксис ...()

foo <- function(...) {
  exprs <- substitute(...())
  print(exprs)
}
foo(abc(def), gh[i], j)

Здесь exprs будет список, который вы можете перебирать по своему усмотрению.

...