Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在ggplot代码中使用ifelse()条件时出错_R_Ggplot2_Dplyr_Data.table_Tidyverse - Fatal编程技术网

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,")"))))