如何在R中的函数中使用条件语句和返回值?

时间:2019-02-22 10:48:49

标签: r statistics

我必须创建一个函数:ans(x),如果x为,则返回值2 * abs(x)。 负数,否则为x。我可以使用什么命令?

谢谢

1 个答案:

答案 0 :(得分:0)

ans <- function(x){
  ifelse(x < 0, 2*abs(x), x)
}

会的。

> ans(2)
[1] 2

> ans(-2)
[1] 4

说明: 我们可以使用内置的基础R函数ifelse()。逻辑很简单:

ifelse(condition, output if condition is TRUE, output if condition is FALSE)

因此,ifelse(x < 0, 2*abs(x), x)将执行以下操作:

  1. 评估值x是否为负(<0)
  2. 如果TRUE,返回2*abs(x)
  3. 如果FALSE,返回x

ifelse()优于传统if()的优点是向量化。 if()只能处理一个值,ifelse()将评估作为输入给出的任何向量。

比较:

ans_if <- function(x){
  if(x < 0){2*abs(x)}else{x}
}

使用传统的if()结构,这是相同的功能。将单个值作为输入将导致两个函数的输出相同:

> ans(-2)
[1] 4
> ans_if(-2)
[1] 4

但是,如果您想输入多个值,那么

test <- c(-1, -2, 3, -4)

ifelse()变体将评估向量的每个元素,并以相同长度的向量生成正确的输出:

> ans(test)
[1] 2 4 3 8

if()变体会发出警告

> ans_if(test)
[1] 2 4 6 8
Warning message:
In if (x < 0) { :
  the condition has length > 1 and only the first element will be used

并返回错误的输出,因为只有第一个值用于评估(-1),并且整个矢量的运算都基于该评估。