这是一个例子:
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
有谁知道如何正确使用n
返回的函数中的期望值custom_percent()
?
在有人问之前,我知道我可以事先在摘要数据框中生成统计数据或用作utils::getAnywhere()
解决方法,但这不是问题的重点。