2017-04-13 24 views
0

ggplotに別の関数で引数を渡すために使用したいと思います。たとえば:...関数の引数を別の関数の入力として使用する

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) 

私はevalの(引数[[「YLimプロパティ」]])、引用/逆パース/代替の様々な組み合わせを使用してみましたが、私はそれを正しく評価するために取得することができていません。

+2

理由だけではなく、 'args < - list(...)'?それは私のために働く。 – BrodieG

+0

google 'R省略記号' –

答えて

0

前の関数の環境はオブジェクトと一緒に渡されないので、呼び出しを保存してから式を評価すると、gylimitsが見つかりません。これはfにのみ存在しますの環境。

一つの選択肢はlazyevalパッケージを使用することですが、それは現在rlangの賛成で廃止され、そのdots_listあなたのための素敵なトリックを行います:

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) 

関連する問題