【问题标题】:ggvis inside a function函数内部的 ggvis
【发布时间】:2016-01-04 18:19:12
【问题描述】:

我尝试创建一个简单的函数来绘制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)

【问题讨论】:

  • 你能澄清一下究竟是什么不起作用吗?使用您的功能,test_fn(mtcars, "mpg", "wt") 制作了一个情节。考虑在您的问题中包含reproducible example
  • 另请注意,您可以使用 ggvis 中的 prop 函数来执行此类任务,而不是 lazyeval::interp。它看起来像 ggvis(prop("x", as.name(xvar)), prop("y", as.name(yvar))),但请参阅帮助页面了解更多示例。

标签: r ggvis nse


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2012-08-25
    • 2017-02-02
    相关资源
    最近更新 更多