Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
603 views
in Technique[技术] by (71.8m points)

lazy evaluation - How to expand an ellipsis (...) argument without evaluating it in R

I need a function that accepts an arbitrary number of arguments and stores them in a variable as an expression without evaluating them. I managed to do it with match.call but it seems a little "kludgy".

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)

Clarification

To clarify, I'm asking how to write a function that behaves like expression(). I can't use expression() directly for reasons that are too long to explain.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The most idiomatic way is:

f <- function(x, y, ...) {
  match.call(expand.dots = FALSE)$`...`
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...