当我用ggplot绘图时,我试图使用aes中的局部变量.这就是我的问题的本质:

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以内的局部变量)?

推荐答案

我会捕捉当地的环境,

xy <- data.frame(x=1:10,y=1:10)

plotfunc <- function(Data, YMul = 2){
    .e <- environment()
    ggplot(Data, aes(x = x, y = y*YMul), environment = .e) + geom_line()
}

plotfunc(xy)

R相关问答推荐

R:如何在没有for循环的情况下替换多边形几何中的值?

替换字符的所有实例,但仅限于匹配字符串中

强制相关图以显示相关矩阵图中的尾随零

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

更改Heatmap Annotation对象的名称

R等效于LABpascal(n,1)不同的列符号

如何根据组大小应用条件过滤?

如何在R中合并和合并多个rabrame?

在R中,如何在每个堆叠的条上放置误差条,特别是当使用facet_grid时?

如何根据R中其他列的值有条件地从列中提取数据?

删除具有相同标题的tabPanel(shinly)

如何在ggplot图中找到第二轴的比例

如何在所有绘图中保持条件值的 colored颜色 相同?

从外部文件读取多个值作为字符向量

如何识别倒排的行并在R中删除它们?

如果COLSUM为>;0,则COLNAME为向量

如果条件匹配,则使用Mariate粘贴列名

用满足特定列匹配的另一行替换NA行

ArrangeGrob()和类似的替代方法不接受Grob列表.在Grid.Draw,返回:glist中的错误(...):仅允许在glist";中使用Grobs;

如何使投篮在R中保持一致