10

任意の数の引数を受け取り、それらを評価せずに式として変数に格納する関数が必要です。なんとかできましたmatch.callが、少し「ぎこちない」ようです。

foo <- function(...) {
  expr <- match.call()
  expr[[1]] <- expression
  expr <- eval(expr)
  # do some stuff with expr
  return(expr)
}

> bla
Error: object 'bla' not found
> foo(x=bla, y=2)
expression(x = bla, y = 2)

明確化

明確にするために、のように動作する関数の書き方を尋ねていますexpression()expression()説明するには長すぎるため、直接使用することはできません。

4

3 に答える 3

23

最も慣用的な方法は次のとおりです。

f <- function(x, y, ...) {
  match.call(expand.dots = FALSE)$`...`
}
于 2012-11-13T04:14:17.507 に答える
5

.fromplyrをプロトタイプとして使用する

foo <-   function (...) 
  {
  as.expression(as.list(match.call()[-1]))
  }
于 2012-11-13T00:33:32.427 に答える
3

最終的に意図された結果は少し曖昧です(少し明確にできますか?)。ただし、これは役立つ場合があります。

foo2 <- function(...) {
  expr <- as.list(substitute(list(...)))[-1L]
  class(expr) <- "expression"
  expr
}

例:

foo2(x=bla, y=2)
# expression(x = bla, y = 2)
于 2012-11-13T00:46:39.077 に答える