2014-01-11 341 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