ggvis里面有一个函数

时间:2016-01-04 18:19:12

标签: r ggvis nse

我尝试创建一个允许绘制ggvis图的简单函数。我知道我必须在这里使用非标准评估,这就是我使用intercept函数lazyeval函数的原因:

test_fn <- function(data,xvar, yvar){

        plot <- 
                data %>% 
                ggvis(lazyeval::interp(~x, x = as.name(xvar)), 
                      lazyeval::interp(~y, y = as.name(yvar))) %>% 
                layer_points()
        return(plot)
}

修改

此功能正常工作:

test_fn(mtcars,'mpg', 'qsec')

但是,为了给定的命令,我还应该做些什么呢?

test_fn(mtcars,mpg, qsec)

1 个答案:

答案 0 :(得分:1)

一种选择是使用deparse(substitute(...))进行此类非标准评估。它使功能更长,但可以方便用户。

这是使用lazyeval::interp方法看起来的样子:

test_fn <- function(data, xvar, yvar){
    x <- deparse(substitute(xvar))
    y <- deparse(substitute(yvar))
    plot <- 
        data %>% 
        ggvis(lazyeval::interp(~x, x = as.name(x)), 
              lazyeval::interp(~y, y = as.name(y))) %>% 
        layer_points()
    return(plot)
}

这是prop的版本:

test_fn <- function(data, xvar, yvar){
    x <- deparse(substitute(xvar))
    y <- deparse(substitute(yvar))
    plot <- 
        data %>% 
        ggvis(prop("x", as.name(x)), 
              prop("y", as.name(y))) %>% 
        layer_points()
    return(plot)
}

两者都使用不带引号的变量名称:

test_fn(mtcars, mpg, wt)

enter image description here