在 R 中使用 ggplot2 进行非标准评估

Non Standard Evaluation with ggplot2 in R

我在下面有一个相当简单的函数,它将一个数据框和该数据框中的一列作为参数。该函数在 y 轴上绘制数据框中的列与 x 轴上的 "year" 列。然后它将显示相关列的值及其在绘图上的点。

df_to_plot = data.frame(year = c(2011, 2012, 2013), data=c(0.22334, 0.345345, 0.456234))

makePlotFunc = function(df, y_var)
{
    ggplot(df, aes_(x=as.name("year"), y = as.name(y_var), group=1, label=as.name(y_var))) + geom_point() + geom_line() + geom_text()
}

makePlotFunc(df_to_plot, data)

您会注意到 "data" 列有很多小数点。我希望能够四舍五入这些小数点,以便在绘图上显示这些数据点时看起来不错。通常,当不使用 "non-standard evaluation" 时,可以在 geom_text() 中很容易地完成,如下所示:

geom_text(aes(round(data, 2))

因为我使用非标准评估将其制成函数,所以不能这样做。

geom_text(aes_(round(as.name(y_var), 2)))

这会引发错误。

non-numeric argument to mathematical function

我通过在数据框中创建一个新列来解决我的问题,该列用作这样的标签。

df_to_plot = mutate(df_to_plot, label = as.character(round(data, 2)))

尽管如此,如果有人知道我如何使用非标准评估来做到这一点,我仍然很感兴趣。

感谢 MrFlick 的回答。成功了!

geom_text(aes_(label=bquote(round(.(as.name(y_var)), 3))))