我必须创建一个函数:ans(x),如果x为,则返回值2 * abs(x)。 负数,否则为x。我可以使用什么命令?
谢谢
答案 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)
将执行以下操作:
TRUE
,返回2*abs(x)
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),并且整个矢量的运算都基于该评估。