2014-01-11 2 views
1

Я нахожусь в пользовательской функции в R и хочу, чтобы некоторые строки кода были настроены на параметры. Например, Position - это вход для функции. Я хочу отображать или не отображать ось, если эта переменная равна 2 или 4. Это то, что у меня есть, но она, похоже, не работает. Возможно ли это в R? (См строка 2 кода)Операторы ifelse в R

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

EDIT для уточнения комментариев

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

Смежные вопросы