在aes内的局部变量

在aes内的局部变量

aes当我用ggplot绘图时,我正在尝试使用局部变量。这是我的问题归结为本质:

xy <- data.frame(x=1:10,y=1:10)plotfunc <- function(Data,YMul=2){
    ggplot(Data,aes(x=x,y=y*YMul))+geom_line()}plotfunc(xy)

这会导致以下错误:

Error in eval(expr, envir, enclos) : object 'YMul' not found

好像我不能使用局部变量(或函数参数)aes。可能是由于aes当局部变量超出范围后执行的内容会发生吗?我怎样才能避免这个问题(除了不使用局部变量aes)?


德玛西亚99
浏览 499回答 3
3回答

绝地无双

由于@Justin:ggplot()的aes似乎已认准了YMul在data数据帧的第一个,如果没有找到,然后在全球环境。我喜欢将这些变量添加到数据框中,如下所示,因为它在概念上对我有意义。我也不必担心全局变量的变化会对功能产生意想不到的后果。但所有其他答案也是正确的。所以,请使用适合您的方式。require("ggplot2")xy&nbsp;<-&nbsp;data.frame(x&nbsp;=&nbsp;1:10,&nbsp;y&nbsp;=&nbsp;1:10)xy&nbsp;<-&nbsp;cbind(xy,&nbsp;YMul&nbsp;=&nbsp;2)ggplot(xy,&nbsp;aes(x&nbsp;=&nbsp;x,&nbsp;y&nbsp;=&nbsp;y&nbsp;*&nbsp;YMul))&nbsp;+&nbsp;geom_line()或者,如果您想要示例中的函数:plotfunc&nbsp;<-&nbsp;function(Data,&nbsp;YMul&nbsp;=&nbsp;2){ &nbsp;&nbsp;&nbsp;&nbsp;ggplot(cbind(Data,&nbsp;YMul),&nbsp;aes(x&nbsp;=&nbsp;x,&nbsp;y&nbsp;=&nbsp;y&nbsp;*&nbsp;YMul))&nbsp;+&nbsp;geom_line()}plotfunc(xy)
打开App,查看更多内容
随时随地看视频慕课网APP