【发布时间】:2018-09-18 07:09:29
【问题描述】:
这是一个例子:
library(ggplot2)
library(scales) # for percent() function
custom_percent <- function(n){
function(x){
return(paste(percent(x), sprintf('(%d)', round(x* (n)))))
}
}
mydata = data.frame(x = rep(c('a','b','c'), each=100))
ggplot(mydata) + geom_text(aes_(x=~x, y=~..prop..,
label=bquote(.(custom_percent)(length(x))(..prop..)),
stat='count')
该函数在这样的环境之外可以正常工作,但为了与ggplot 一起使用,它必须以一种或另一种方式引用。
不幸的是,我无法弄清楚如何正确返回包含以这种方式传递的变量的生成函数。我试过这个:
custom_percent <- function(n){
n = enquo(n)
function(x){
return(paste(percent(x), sprintf('(%d)', round(x* (!!n)))))
}
}
但是当我这样做时出现错误:Error in !n : invalid argument type
有谁知道如何在custom_percent()返回的函数中正确使用n的期望值?
在有人问之前,我知道我可以事先在摘要数据框中生成统计数据或使用utils::getAnywhere() 作为解决方法,但这不是问题的重点。
【问题讨论】:
-
你的输出需要什么?
-
例如。
custom_percent(3)应该输出什么? -
您使用的是什么版本的
ggplot2?我正在使用开发版并获得Error in FUN(X[[i]], ...) : Unknown input:function -
请注意,您只能在整洁的 eval 函数的参数中使用
!!。paste()、sprintf()和round()都是正常功能。
标签: r ggplot2 tidyverse tidyeval non-standard-evaluation