【问题标题】:How to determine whether two variables have the same sign in R如何确定两个变量在R中是否具有相同的符号
【发布时间】:2014-06-24 10:23:39
【问题描述】:

例如,我有两个变量 a 和 b。它们都是数字。我想检查它们是否具有相同的符号(均为正或均为负)或具有不同的符号。如果其中一个是 0(它们不能都是 0),那么我认为它们是不同的符号。 我知道我会写

if (a*b<=0) ...

但我认为这不是一个好方法,因为 a 和 b 都是大数,而 R 会发出警告:

Warning message:
In b[i - 1, 4] * b[i, 4] :NAs produced by integer overflow

提前致谢!

【问题讨论】:

  • sign 可能在这里有用。

标签: r


【解决方案1】:

一个好主意是在 R 中使用 sign() 函数,如果数字为正数,则返回 1-1,如果数字为 0,则返回 0。您可以像这样将它们链接在一起:

sign(x)==sign(y)

编辑:感谢关于返回 1/-1/0 而不是 TRUE 或 FALSE 的更正,我今天早上玩它时完全错过了。

【讨论】:

  • sign 在 R 中返回 -1、0 或 1,因此 sign(-1) &amp; sign(1) 等于 TRUE。所以使用sign 的正确答案是sign(x) == sign(y)
  • @alko989:这应该是答案,否则应该更正 amblina 的帖子以反映这一点。
  • @jbaums:我评论(并反对)说帖子需要更正。如果它得到纠正,我也会考虑对 正确 答案进行投票。
  • @alko989 感谢您的更正,关于&amp;==,您是完全正确的,我已经编辑了我的答案以反映这一点。
【解决方案2】:

试试这个

f <- function(a,b) {ifelse(a == 0 | b == 0,as.logical("FALSE"),!xor(sign(a)+1,sign(b)+1))}

函数f 为相同的符号返回逻辑TRUE,为不同的符号返回FALSE,或者如果其中一个变量等于0

【讨论】:

  • 不需要 "as.logical("FALSE")" -- 简单的 FALSE 就足够了。
  • ifelse 也不需要,因为这里没有向量
猜你喜欢
  • 2022-01-23
  • 2012-11-21
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2011-03-26
  • 2018-09-24
相关资源
最近更新 更多