函数内部的ggvis

ggvis inside a function

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

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)

一种选择是使用 deparse(substitute(...)) 进行这种 non-standard 评估。它使功能更长,但可以方便用户。

这是使用 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)