【问题标题】:How to use conditional statement and return value for a function in R?如何在 R 中为函数使用条件语句和返回值?
【发布时间】:2019-07-16 10:48:00
【问题描述】:

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

谢谢

【问题讨论】:

  • 在问这个问题之前你做了什么?你得到负面分数的原因是因为你的问题没有表明你在提出问题之前做了任何事情。请查阅 StackOverflow 问答协议。您将通过先尝试了解更多信息,其他查看您帖子的人也会如此。

标签: r statistics


【解决方案1】:
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 &lt; 0, 2*abs(x), x) 将执行以下操作:

  1. 评估值 x 是否为负 (
  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),并且对整个向量的操作基于此评估。

【讨论】:

  • 谢谢。实际上我正在做一些在线练习,这就是我需要这个的原因。你能解释一下这个论点吗?为什么我们在这里使用 ifelse,为什么不只是 if 以及为什么在 2*abs(x) 之后再次出现 x。我的意思是你能解释一下你推荐的命令背后的整个逻辑是什么意思吗?
  • 我已经添加了解释。
  • 非常感谢
  • 另一件事,如果有人可以解释一下。我必须创建一个函数 ans(x, y, c),如果 x^2 x^2*y,否则返回值 0。我正在使用以下命令: ansx^2*y, 0)} 有什么问题这是因为 R 不接受它。
  • 为什么是+?是不是笔误?
猜你喜欢
  • 2012-03-28
  • 2021-05-02
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多