【问题标题】:ifelse statements in RR中的ifelse语句
【发布时间】:2014-01-11 14:51:41
【问题描述】:

我在 R 中的一个用户生成的函数中,并希望某些代码行以参数为条件。例如,Position 是函数的输入。如果此变量为 2 或 4,我想显示或不显示轴。这就是我所拥有的,但它似乎不起作用。在 R 中这样的事情可能吗? (见代码第 2 行)

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')
                  )

【问题讨论】:

  • 你看help(ifelse)了吗?
  • 是的,但在这种情况下这似乎对我没有帮助

标签: r if-statement


【解决方案1】:

我相信`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")
  }
}

编辑以澄清 cmets

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)

【讨论】:

  • 谢谢!只更新了几个错误。需要将 theme() 添加回 if else 语句中
  • 太棒了!但请注意ififelse()是两个不同的函数。
  • 我现在明白了。我习惯用 SAS 编程,所以我还在学习编程风格的差异。
  • @MartínBel,我对你的编辑反转和你的 cmets 感到困惑。你试图完成(或逆转)什么?你关心哪些角色?现在答案显示 ?[quote]if[quote] (其中引号是单个反引号),这是行不通的;只需?if 即可。
  • Markdown 是愚蠢的,但请注意?"if" 也可以。
【解决方案2】:

另一种方法是替换您的第二行代码:

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

【讨论】:

  • @jilhoward 我喜欢这个解决方案。对于一个函数来说,这似乎很有趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多