R比较两个数组

标签 r

我想比较两个数组。我需要测试每个元素之间的近似相等性。
我正在使用 all.equal(target, current , tolerance = ...) ,但这可能是错误的,或者我不明白如何all.equal作品。
我想要这种行为的东西:

 a <-array(1:18, dim=c(3,3,2))
 b <- a
 b[3,3,2] <-18.01
 all.equal(a,b,tolerance = 0.1) # return TRUE
 all.equal(a,b,tolerance = 0.001) # return TRUE
 newFunction(a,b, tolerance = 0.1) # return TRUE
 newFunction(a,b, tolerance = 0.001) # return FALSE

我应该矢量化 all.equal 吗?
你能给我一个提示吗

最佳答案

我认为这里的断开是 tolerance参数不做你想要的。您希望它能够标记任何大于 0.001 的个体差异,但 all.equal()函数通过考虑可用条目的平均相对差异来工作。也就是说,它本质上是将所有内容进行汇总比较,而不是逐个元素地进行比较。

如果你想要逐个元素的比较,你最好直接写一个,比如@Ben 的评论 all(abs(a-b) < .001) ,或者大概是你的 newFunction()做。

进一步充实 all.equal() 的细微差别:

c <- a / 10
d <- c
d[3, 3, 2] <- 1.81
all.equal(c, d, tolerance = 0.1)   # returns TRUE
all.equal(c, d, tolerance = 0.001) # returns the mean relative difference

最后一行与相应行的区别在于平均相对差异现在超过了 tolerance 0.001,即使 c 之间的绝对差异和 da 之间的相同和 b .不仅会all.equal()有效地同时考虑所有条目的差异,但它也会将它们缩放到条目的大小。

关于R比较两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61680119/

相关文章:

R 函数返回值以及警告消息

r - 有没有办法将 knitr chunk 和 knit 选项实现为 R Markdown 的项目范围环境或配置文件?

r - 如何使用 ggplot2 控制绘图的尺寸/大小

r - 在ggplot2中创建一个新的比例

r - 计算 r 中的成绩

r - 如何对数据集进行分层采样,使用 Caret 进行统计分析并在 r 中重复?

css - 如何在 R 中创建动态 HTML 表格

r - : operator 的不一致行为

r - 查找大于 0 的列表元素的索引

r - 从 Sublime Text 2 中的另一个构建系统访问构建系统