R 在ggplot代码中使用ifelse()条件时出错
不幸的是,当尝试在R 在ggplot代码中使用ifelse()条件时出错,r,ggplot2,dplyr,data.table,tidyverse,R,Ggplot2,Dplyr,Data.table,Tidyverse,不幸的是,当尝试在ggplotcode中使用ifelse条件时,我将element\u blank()函数传递到axis.test.x参数theme() 任何建议或帮助都将不胜感激。使用eval()和parse()解决此问题。eval()函数计算表达式。函数的作用是:将字符类的R对象转换为表达式类的R对象。通过使用,如果其他改变表达 # control hideAxis = T if(hideAxis == T){ axis_text_x_element <- 'element
ggplot
code中使用ifelse
条件时,我将element\u blank()
函数传递到axis.test.x
参数theme()
任何建议或帮助都将不胜感激。使用eval()
和parse()
解决此问题。eval()
函数计算表达式。函数的作用是:将字符类的R对象转换为表达式类的R对象。通过使用,如果其他改变表达
# control
hideAxis = T
if(hideAxis == T){
axis_text_x_element <- 'element_blank()'
} else {
axis_text_x_element <- 'element_text(angle =20)'
}
# plot
ggplot(data = iris , aes(x=Sepal.Length, y=Sepal.Length)) +
geom_bar(stat="identity", fill ='#2219CCCC') +
xlab("Sepal.Length") +
ylab("Sepal.Length") +
eval(parse(text=(paste("theme(axis.text.x = ",axis_text_x_element,")"))))
#控制
hideAxis=T
如果(hideAxis==T){
axis\u text\u x\u元素我建议更简单,只需axis.text.x=if(hideAxis)element\u blank()else element\u text(angle=20)
(if(cond==TRUE)
是不必要的,两者之间没有区别。)就行了!!!!一般来说,ifelse
只有在你认为条件“是”和“否”时才是有益的组件是向量(长度或长度均相同1),更倾向于长度2或更高。在这种情况下,由于hideAxis
对我而言总是意味着TRUE
或FALSE
,长度1,如果
正确,则为单数。(顺便说一句:ifelse
并不总是你的朋友,它的使用在处理除numeric
或character
以外的向量时可能会产生后果,因为例如POSIXt
将被默默地转换为numeric。)感谢@r2evans有意义:)我只相信ifelse
,当我知道这两个“是”“否”向量是简单对象的简单向量(如数字
,整数
,逻辑
,或字符
);其他任何东西(如POSIXt
,日期
,列表
,或复杂的东西,如本例中的绘图组件)和ifelse
,都是不可靠的。
# control
hideAxis = T
if(hideAxis == T){
axis_text_x_element <- 'element_blank()'
} else {
axis_text_x_element <- 'element_text(angle =20)'
}
# plot
ggplot(data = iris , aes(x=Sepal.Length, y=Sepal.Length)) +
geom_bar(stat="identity", fill ='#2219CCCC') +
xlab("Sepal.Length") +
ylab("Sepal.Length") +
eval(parse(text=(paste("theme(axis.text.x = ",axis_text_x_element,")"))))