为什么ifelse()不能使用element_text()?

4

为什么我无法返回element_text ()元素?

> ifelse(TRUE,element_text(size=20),element_text(size=10))
[[1]]
NULL

但是我可以做到这个吗?
> element_text(size=20)
List of 8
 $ family    : NULL
 $ face      : NULL
 $ colour    : NULL
 $ size      : num 20
 $ hjust     : NULL
 $ vjust     : NULL
 $ angle     : NULL
 $ lineheight: NULL
 - attr(*, "class")= chr [1:2] "element" "element_text"
1个回答

9
你不能用你正在尝试使用的方式来完成它。以下是我的一个例子:
ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + 
    geom_boxplot() + 
    theme(legend.text = element_text(size=ifelse(TRUE, 20, 10)))

这与你所使用的ifelse有关,如果使用的是向量化的ifelse,那么就会出现问题。我认为你需要使用if(){}else{},例如:

ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + 
    geom_boxplot()+ 
    theme(legend.text = if(TRUE){element_text(size=20)} else {element_text(size=10)})

虽然我个人不会这样格式化,但为了与你的方法进行比较,我将其保留在一行上。

问题不在于ggplot2,而是你对ifelse的使用。请查看?ifelse,文档中指出:

 ‘ifelse’ returns a value with the same shape as ‘test’ which is
 filled with elements selected from either ‘yes’ orno’ depending
 on whether the element of ‘test’ isTRUEorFALSE’.

在您的问题中,您展示了element_text(size=10)的输出结果,但其结构与test不同。

5
嗨 Tyler -- 恭喜达到1万关注! - Josh O'Brien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接