如何从R中的'aes()'Map中提取变量名

9avjhtql  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(125)

假设我有一个ggplot 2Map:

mapping = ggplot2::aes(x=ifelse(a, 1, 2), y=a*b)
mapping

美学Map:

  • x -〉ifelse(a, 1, 2)
  • y -〉a * b

Map由用户提供,因此可以是任何内容。我希望提取引用的变量,因为需要这些变量来获取数据并准备数据框。由于大小限制,我不希望在数据框中包括所有可能的列-仅包括将在可视化中使用的列。
基本上我需要一个函数f(),这样:

f(mapping) == c('a', 'b')

提取文本本身非常容易:
一个二个一个一个
但是我不知道如何从字符串中获取变量/列名。

pvcm50d1

pvcm50d11#

您可以使用底数R的all.vars,而无需参考数据框。

unique(unlist(lapply(mapping, all.vars)))
#> [1] "a" "b"
dgtucam1

dgtucam12#

只要所有变量位于同一框架/环境中,您就可以执行以下操作:

unique(unlist(lapply(mapping, \(x)names(get_all_vars(x)))))
[1] "a"  "b"

相关问题