6

假设我有两个 ggplot 美学:

a.1 <- aes(v.1=1, v.2=2)
a.2 <- aes(v.3=3)

有没有办法结合已经建立的美学?在我的示例中,它将类似于:

a.merged <- aes(v.1=2, v.2=2,v.3=3)

我知道 aes_string 可用于从可以连接的字符向量构建美学,但我正在研究已经构建了两种美学的情况,我想避免必须先将它们转换为字符。

4

2 回答 2

10
> c(a.1,a.2)
$v.1
[1] 1

$v.2
[1] 2

$v.3
[1] 3

aes对象是“未评估的表达式”,c()函数按预期工作,具体取决于您对“预期”的定义。为了安全起见,您可能需要添加回被剥离的类c()

a.merged <- c(a.1,a.2)
class(a.merged) <- "uneval"

如果您想一步完成,则该函数modifyList不会去除“名称”-less 属性:

> modifyList(a.1, a.2)
List of 3
 $ v.1: num 1
 $ v.2: num 2
 $ v.3: num 3
> attributes(modifyList(a.1, a.2))
$names
[1] "v.1" "v.2" "v.3"

$class
[1] "uneval"
于 2013-11-19T23:26:49.113 回答
0
library(ggplot2)

a.1 <- aes(v.1=1, v.2=2)
a.2 <- aes(v.3=3)

modifyList(a.1, a.2)
Aesthetic mapping: 
* `v.1` -> 1
* `v.2` -> 2
* `v.3` -> 3

modifyList不改变它的论点,尽管有名字。感谢Simon.SA在评论中提出这种方法。

于 2021-01-15T09:48:57.587 回答