【发布时间】:2020-03-27 22:06:34
【问题描述】:
我使用 base R 中的 'with()' 函数,我想知道它是否可以与 'ggplot2' 结合使用。如果我使用基图,我会这样做:
df <- data.frame(a= 1:10, b= 1:10)
with(df, plot(a, b))
ggplot 的模拟方法失败:
library(ggplot2)
with(df, {ggplot(aes(a, b)) + geom_point()})
我猜这是因为 'with()' 只是将 'plot(a, b)' 替换为 'plot(df$a, df$b)' 但如果我们不提供 'ggplot()' 则不起作用一个数据参数(至少不是这样)。这是正确的还是我们可以以某种方式将“with”和“ggplot2”一起使用?
一些cmets问我为什么要这样做,这就是为什么。我正在编写一个包含 with() 的非常通用的函数,并将各种函数放入 with(),例如 mean()、sd() amd 等等。 ggplot() 只是我想通过我的函数成功放入的另一个函数,其中包括知道如何将 ggplot() 放入 with()。到目前为止,我的函数可以输出数据帧和其他对象,现在我知道如何通过我的函数放置 ggplot 对象。为了简单起见,我没有在我的问题中包含这个。
【问题讨论】:
-
我不明白你为什么要在这里使用
with()。ggplot已经有一个参数供您传入值来自的 data.frame。你认为你可以用with()做什么而你不能单独用ggplot()做什么? -
如果您担心 tidyverse 软件包的稳定性,那么您应该使用
renv或packrat之类的解决方案来维持稳定的环境,而不是限制自己使用with -
另外,如果你担心包的稳定性,ggplot2 (
ggplot(data, aes(x, y))) 的主要 API 多年来一直没有改变,几乎肯定不会改变。 R 开发的现代习语依赖于 ggplot 使用的评估风格,完全取代了with()的使用,我已经 6 或 7 年没有使用过。 -
@MrFlick 我编写了一个包含 with() 的函数,并且可以通过它放置许多对象。因此,例如,我可以通过我的函数放置一个 data.frame 并获得所需的输出数据。这对于 ggplot 是不可能的,因为输出不是数据框而是绘图。好消息是现在我的函数可以输出各种对象,包括 ggplot。
-
@Richard 如果我们直接讨论这个问题,你可能是对的,但实际上我正在构建一个包含 with() 的非常通用的函数。该函数可以输出各种对象,到目前为止效果很好。我不知道您建议的替代方案是否适用于我的情况。