gpt4 book ai didi

r - R ggplot2如何通过aes获取列名?

转载 作者:行者123 更新时间:2023-12-02 01:44:42 24 4
gpt4 key购买 nike

我了解如何使用 aes,但我不了解编程范例。

当我使用 ggplot 时,假设我有一个列名为“animal”和“weight”的 data.frame,我可以执行以下操作。

ggplot(df, aes(x=weight)) + facet_grid(~animal) + geom_histogram()

我不明白的是,重量和动物不应该是字符串,它们只是按原样打印出来。我怎样才能做到这一点?它应该是这样的:

ggplot(df, aes(x='weight')) + facet_grid('~animal') + geom_histogram()

我不会在任何地方“声明”重量或动物作为向量?这似乎……真的很不寻常?这是否像一个宏,或者它获取 aes“整体”,在 df 中查找其列名称,然后填充在 aes 中看到这些变量名称的空白?

我想我想要的是在 R 中看到一些类似的函数,它可以采用未在范围内声明的变量以及此功能的名称,这样我可以进一步阅读,也许可以实现我自己的类似函数。

最佳答案

R中,这称为非标准评估。有一个chapter on non-standard evaluation in R在《高级 R》一书中,可免费在线获取。基本上,R 可以查看调用堆栈来查看传递给函数的符号,而不仅仅是符号指向的值。它在基础 R 中被大量使用。在 tidyverse 中它的使用方式略有不同,它有一个名为 quosure 的正式类,使这些东西更容易使用。

这些方法非常适合交互式编程。它们可以减少击键和困惑,但如果您创建的函数过于依赖于该函数,它们将变得难以编写脚本或包含在其他函数中。

公式语法(带有 ~ 的语法)可能是使用符号最安全、更编程的方式。它捕获符号,稍后可以使用 model.frame() 等函数在 data.frame 的上下文中对其进行评估。还有内置函数可以帮助操作 update()reformulate 等公式。

由于您对 aes() 调用明确感兴趣,因此您只需键入不带引号的名称即可获取 R 中任何函数的源代码。使用ggplot2_2.2.1,函数如下所示

aes
# function (x, y, ...)
# {
# aes <- structure(as.list(match.call()[-1]), class = "uneval")
# rename_aes(aes)
# }
# <environment: namespace:ggplot2>

最新版本的 ggplot 使用不同的 rlang 方法来与其他 tidyverse 库更加一致,因此看起来有点不同。

关于r - R ggplot2如何通过aes获取列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com