0

我尝试创建一个允许绘制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)
4

1 回答 1

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)

在此处输入图像描述

于 2016-01-04T19:41:09.010 回答