2014-01-11 280 views
1

我在R中的用户生成函数中,并希望某些代码行在参数上有条件。例如,Position是该函数的输入。我想显示或不显示一个轴,如果这个变量是2或4.这是我有,但它似乎并没有工作。在R中有这样的可能吗? (见代码第2行)R中的ifelse语句

Themes <- theme(axis.title = element_text(size=fsizes), 
        if(Position == 2 | Position == 4, axis.text.x=element_blank() , axis.text.x = element_text(size=fsizes, color = "black")), 
        axis.text.y = element_text(size=fsizes, color = "black"), 
        title=element_text(size=fsizes), 
        legend.text=element_text(size=fsizes-1.5), 
        legend.key.width = unit(.1, "cm"), legend.key.height = unit(.2, "cm"), 
        legend.position = "top", 
        legend.direction = "horizontal", 
        legend.margin = unit(0, 'cm'), 
        axis.ticks = element_line(size = .2), 
        panel.grid.major = element_line(size=.2), 
        panel.grid.minor = element_line(size=.1), 
        plot.margin = unit(c(.1,.1,.1,0), 'cm') 
       ) 
+1

难道你看'help(ifelse)'? –

+0

是的,但这似乎并没有帮助我在这种情况下 –

回答

2

我相信`if`就是你在这里之后。写?`if`求救,但这个想法是:

if(condition) expression 

或在这种情况下:

if(condition) { 
    expression 1 
} else { 
expression 2 
} 


ifelse(test, cond1, cond2) 

我相信这是不常用来测试功能简单的条件。无论如何, 当然要看?ifelse

require(ggplot2) 


theme_fun <- function(Position = NULL, fsizes = NULL){ 
    theme = theme(axis.title = element_text(size=fsizes), 
       axis.text.y = element_text(size=fsizes, color = "black"), 
       title=element_text(size=fsizes), 
       legend.text=element_text(size=fsizes-1.5), 
       legend.key.width = unit(.1, "cm"), legend.key.height = unit(.2, "cm"), 
       legend.position = "top", 
       legend.direction = "horizontal", 
       legend.margin = unit(0, 'cm'), 
       axis.ticks = element_line(size = .2), 
       panel.grid.major = element_line(size=.2), 
       panel.grid.minor = element_line(size=.1), 
       plot.margin = unit(c(.1,.1,.1,0), 'cm') 
) 

    if(Position == 2 | Position == 4){ 
    theme = theme + axis.text.x=element_blank() 
    } else { 
    theme = theme + axis.text.x = element_text(size=fsizes, color = "black") 
    } 
} 

编辑澄清意见

x = "hello" 

# This if else construct 
if(x == "hello"){ 
    print("como va che?") 
} else { 
    "hello" 
} 

# Is equivalent to this 
`if`(x == "hello", "como va che?", "hello") 

评论的一点是要澄清,function是另一种方式来访问功能。例如,如果你想阅读帮助。

?`if` 

下面是另一个例子:

`+`(1, 100) 
+1

谢谢!只更新了几个错误。需要将主题()添加回if else语句 –

+0

太棒了!但请注意,if和ifelse()是两个不同的函数。 – marbel

+1

现在我明白了。我习惯用SAS编程,所以我仍然在学习编程风格的差异。 –

1

另一种方式做,这是更换您的代码第二行:这个

if(Position == 2 | Position == 4, 
    axis.text.x=element_blank() , 
    axis.text.x = element_text(size=fsizes, color = "black")), 

axis.text.x= ifelse(Position==2 | Position==4, 
        element_blank(), 
        element_text(size=fsizes, color = "black")), 
+0

@jilhoward我喜欢这个解决方案。功能似乎很有趣。 – marbel