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