首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数内部的ggvis

函数内部的ggvis
EN

Stack Overflow用户
提问于 2016-01-04 18:19:12
回答 1查看 91关注 0票数 0

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

代码语言:javascript
复制
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)
}

编辑:

这一功能运作良好:

代码语言:javascript
复制
test_fn(mtcars,'mpg', 'qsec')

但是,我还应该做些什么,才能使特定的命令发挥作用:

代码语言:javascript
复制
test_fn(mtcars,mpg, qsec)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-04 19:41:09

一种选择是将deparse(substitute(...))用于这种非标准的评估。它使功能更长,但可以方便用户。

下面是使用lazyeval::interp方法时的样子:

代码语言:javascript
复制
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的版本

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34597344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档