【发布时间】:2019-07-16 10:48:00
【问题描述】:
我必须创建一个函数:ans(x),它返回值 2*abs(x),如果 x 是 负数,否则为 x。我可以使用什么命令?
谢谢
【问题讨论】:
-
在问这个问题之前你做了什么?你得到负面分数的原因是因为你的问题没有表明你在提出问题之前做了任何事情。请查阅 StackOverflow 问答协议。您将通过先尝试了解更多信息,其他查看您帖子的人也会如此。
标签: r statistics
我必须创建一个函数:ans(x),它返回值 2*abs(x),如果 x 是 负数,否则为 x。我可以使用什么命令?
谢谢
【问题讨论】:
标签: r statistics
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),并且对整个向量的操作基于此评估。
【讨论】:
+?是不是笔误?