R语言中向ggplot传递函数参数的报错问题排查
ggplot函数参数传递错误的解决方法
问题原因
ggplot2的aes()采用非标准求值机制,直接在函数里写va1、va2时,它会去全局环境查找这些变量,而非函数参数对应的数据集列名,因此抛出object 'base' not found错误。
正确代码实现
library(ggplot2) test <- data.frame(id=c(1,2,3,4,5), base=c(230,365,390,201,298), heig=c(200,310,90,100, 91), widt=c(21,75,22,46,51)) fun1 <- function(va1, va2){ ggplot(data=test, mapping=aes({{va1}}, {{va2}})) + geom_point() } fun1(base, heig)
关键说明
{{}}是rlang提供的准引用语法,ggplot2已内置支持,它能将函数参数对应的列名正确传递给aes(),让ggplot在指定数据集里查找对应列。- 你之前尝试的
[[]]不适用这里,因为[[]]用于提取列的具体值,而aes()需要的是列名的引用,不是数值。
内容的提问来源于stack exchange,提问作者Mr T.
相关产品推荐
相关产品推荐

