例如,我有两个变量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
提前致谢!
答案 0 :(得分:7)
一个好主意是使用R中的sign()
函数,如果数字为正数,则返回1
或-1
;如果数字为0,则返回0
你可以像这样链接这些:
sign(x)==sign(y)
编辑:感谢关于返回1 / -1 / 0而不是TRUE或FALSE的更正,当我今天早上玩它时,我完全错过了。
答案 1 :(得分:0)
试试这个
f <- function(a,b) {ifelse(a == 0 | b == 0,as.logical("FALSE"),!xor(sign(a)+1,sign(b)+1))}
函数f
为相同的符号返回逻辑TRUE
,为不同的符号返回FALSE
,或者如果其中一个变量等于0