3 Stimmen

Wie erhalte ich die Namen der Argumente, die in einer Funktion an ... übergeben werden?

Mögliches Duplikat:
Verwendung von substitute, um den Namen des Arguments mit

Beachten Sie, dass dies etwas anderes ist als das Abrufen der Vektoren selbst mit list(...) oder etwas in dieser Form. Was ich gerne tun würde, ist einfach alle Argumente, die an ... bevor das Parsing durchgeführt wird.

Beispiel: Ich möchte eine Funktion, die einfach wie folgt funktioniert:

f(apple, banana, car)
## --> returns c("apple", "banana", "car"), 
## ie, skips looking for the objects apple, banana, car

Am ehesten habe ich Folgendes herausgefunden

f <- function(...) {
  return( deparse( substitute( ... ) ) )
}

aber dies gibt nur das erste Argument zurück, das von der ... . Was denken Sie?

6voto

agstudy Punkte 116600
f <- 
  function(...){
     match.call(expand.dots = FALSE)$`...`  
  }

Einige Erklärungen aus ?match.call:

 1. match.call returns a call in which all of the specified arguments are specified by their full names .
 2. Here it is used to pass most of the call to another function, often model.frame. 
    Here the common idiom is that expand.dots = FALSE

Hier einige Tests:

f(2)        # call of a static argument  
[[1]]
[1] 2

> f(x=2)  # call of setted argument
$x
[1] 2

> f(x=y)  # call of symbolic argument
$x
y

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X