2017-04-13 4 views
0

Ich möchte ... verwenden, um Argumente in ggplot in einer anderen Funktion übergeben. Zum Beispiel:Verwenden von ... function Argument als Eingabe für eine andere Funktion

dat <- data.frame(x = c(1, 2, 3), y = c(1, 2, 3)) 

f <- function(dat) { 
    ylimits = c(min(dat$x, dat$y), max(dat$x, dat$y)) 

    g(dat, ylim = ylimits) 
} 

g <- function(dat, ...) { 
args <- eval(substitute(alist(...))) 

ggplot(dat, aes(x = x, y = y)) + geom_point() + coord_cartesian(ylim = args[['ylim']]) 
} 

f(dat) 

versuchte ich richtig eval (args [[ ‚ylim‘]]), verschiedene Kombinationen von Angebote/Deparse/Ersatz, aber ich habe nicht in der Lage, um es zu bewerten, verwenden.

+2

Warum nicht einfach 'Argumente <- Liste (...)'? Das ist für mich in Ordnung. – BrodieG

+0

Google 'R Ellipse' –

Antwort

0

Die Umgebung der vorherigen Funktion wird zusammen mit dem Objekt nicht bestanden, so dass, wenn Sie den Anruf speichern und dann versuchen, es den Ausdruck in g zu bewerten es nicht in der Lage sein wird, ylimits, um herauszufinden, welche existiert nur in f die Umgebung.

Eine Option ist das lazyeval Paket zu verwenden, aber es zur Zeit für rlang, das ist veraltet dots_list wird für Dich den Trick gut tun:

library(ggplot2) 

dat <- data.frame(x = c(1, 2, 3), y = c(1, 2, 3)) 

f <- function(dat) { 
    ylimits = c(min(dat$x, dat$y), max(dat$x, dat$y)) 

    g(dat, ylim = ylimits) 
} 

g <- function(dat, ...) { 
    args <- rlang::dots_list(...) 

    ggplot(dat, aes(x = x, y = y)) + geom_point() + coord_cartesian(ylim = eval(args[['ylim']])) 
} 

f(dat) 

Verwandte Themen