R 理解函数的应用:x>;y-z&;x<;y+;Z

R 理解函数的应用:x>;y-z&;x<;y+;Z,r,math,R,Math,我的数学不是特别好,我正在努力理解一些R代码。有一个名为“compareforequality”的函数,如下所示: compareforequality <- function(val1, val2, epsilon) { val1 = as.numeric(val1); val2 = as.numeric(val2); equal = val1 > (val2 - epsilon) & val1 < val2 + epsilon; eq

我的数学不是特别好,我正在努力理解一些R代码。有一个名为“compareforequality”的函数,如下所示:

compareforequality <- function(val1, val2, epsilon)
{
    val1 = as.numeric(val1);
    val2 = as.numeric(val2);
    equal = val1 > (val2 - epsilon) & val1 < val2 + epsilon;
    equal
}
compareforequality(val2-epsilon)&val1
其中,val1和val2是表示时间点的数字向量(通常为-10到1000之间的整数,用于标识时间序列中的天数),epsilon设置为1e-10。我可以看出,如果值相同/不同,它将返回true/false,但是像这样的函数的应用程序是什么,而不是使用类似idential()的东西呢。ε值对比较有什么影响


谢谢,

关键不在于它们完全相等,而在于比较大致相等,如“
val1
val2
epsilon
范围内”


这类功能的经典示例可能是浮点数,其中(例如)
0.1+0.2!=0.3
,但是对于一些小的
ε
,在
ε
范围内的
0.1+0.2
,这已经足够了。

由于舍入误差,数学上相等的事物在数值上并不总是相等的
all.equal()
而不是
idential()
将是一个内置函数替换,因为
all.equal()
有一个可选的公差参数。对于编写代码的人来说,这些问题可能更好。也许他们不知道相同的存在,或者他们只是想更明确地说明他们在做什么。(我认为做这种比较更清晰、更简单的方法是
abs(val1-val2)
。我知道你不能控制它,但这只是另一种看待它的方式。)啊,我没有考虑舍入场景,因为向量应该是整数,但这是有意义的。谢谢你,约翰。Flick先生-如果我能的话,我会的!无论如何谢谢。@flick先生,我怀疑
epsilon
的使用更接近于
all.equal(…,公差=1e-10)
。dmb74,这是关于实际等式,不一定是完全等式,可能与。哦,好的,如果ε是e-10,那么只要数字匹配到第10位小数,任何东西都是等价的。谢谢你,这帮我把我的思绪围绕在它上面!