- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果这不是重复,我会感到惊讶,但我找不到解决方案。
我了解 ==
在测试 float 相等性方面的局限性。应该使用 all.equal
0.1 + 0.2 == 0.3
# FALSE
all.equal(0.1 + 0.2, 0.3)
# TRUE
但是 ==
具有矢量化的优点:
set.seed(1)
Df <- data.frame(x = sample(seq(-1, 1, by = 0.1), size = 100, replace = TRUE),
y = 0.1)
Df[Df$x > 0 & Df$x < 0.2,]
## x y
## 44 0.1 0.1
## 45 0.1 0.1
# yet
sum(Df$x == Df$y)
# [1] 0
我可以自己编写一个(糟糕的)函数:
All.Equal <- function(x, y){
stopifnot(length(x) == length(y))
out <- logical(length(x))
for (i in seq_along(x)){
out[i] <- isTRUE(all.equal(x[i], y[i]))
}
out
}
sum(All.Equal(Df$x, Df$y))
给出了正确的答案,但还有很长的路要走。
microbenchmark::microbenchmark(All.Equal(Df$x, Df$y), Df$x == Df$y)
Unit: microseconds
expr min lq mean median uq max neval cld
All.Equal(Df$x, Df$y) 9954.986 10298.127 20382.24436 10511.5360 10798.841 915182.911 100 b
Df$x == Df$y 16.857 19.265 29.06261 30.8535 38.529 45.151 100 a
另一个选择可能是:
All.equal.abs <- function(x,y){
tol <- .Machine$double.eps ^ 0.5
abs(x - y) < tol
}
其性能与==
相当。
执行此任务的现有函数是什么?
最佳答案
Vectorize()
事实证明这是一个缓慢的选择。正如 @fishtank 在评论中建议的那样,最好的解决方案来自检查绝对差异是否小于某个容差值,即下面的 is_equal_tol()
。
set.seed(123)
a <- sample(1:10, size = 50, replace = T)
b <- sample(a)
is_equal_tol <- function(x, y, tol = .Machine$double.eps ^ 0.5) {
abs(x - y) < tol
}
is_equal_vec <- Vectorize(all.equal, c("target", "current"))
is_equal_eq <- function(x, y) x == y
microbenchmark::microbenchmark(is_equal_eq(a, b),
is_equal_tol(a, b),
isTRUE(is_equal_vec(a, b)),
times = 1000L)
Unit: nanoseconds
expr min lq mean median uq max neval
is_equal_eq(a, b) 0 856 1545.797 1284 2139 14113 1000
is_equal_tol(a, b) 1711 2567 4991.377 4278 6843 27370 1000
isTRUE(is_equal_vec(a, b)) 2858445 3008552 3258916.503 3082964 3204204 46130260 1000
关于r - 矢量化平等测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35097815/
我一直在努力理解 Javascript 的相等性。你能告诉我为什么以下行返回 false 吗? ? alert((function a(){}) == (function a(){})) // fal
scala 中有一个特别的问题每次都困扰着我。每次它咬我...它咬得很重... 为什么这一行编译通过 val x = "10" if (x != 10) { print("do somethin
我正在努力解决我网站的问题。 我想制作 与具有宽度 960px 的主体相等.我的代码有什么问题或缺失?对不起,我不能直接在这里发布代码,不允许我这样做。这是我的文件的链接: https://githu
我希望这些实例的原型(prototype)相同,但以下相等性检查的计算结果为 false。 var emp1 = new(EmployeeScope())("John"); var emp2 = ne
Hamcrest 中是否有匹配器来比较集合的相等性?有 contains 和 containsInAnyOrder 但我需要 equals 不绑定(bind)到具体的集合类型。例如。我无法将 Arra
struct Something { union { float k; int n; }; bool isFloat; bool ope
是否有 == 的等价物?但结果是x != NA如果 x不是 NA ? 以下是我想要的,但它很笨重: mapply(identical, vec1, vec2) 最佳答案 只需将“==”替换为 %in%
无论如何,我认为这是个问题。我正在使用一个 RelayCommand,它用两个委托(delegate)装饰一个 ICommand。一个是 _canExecute 的 Predicate,另一个是 _e
假设我有一个界面 interface IFoo{ val foo:String } 我想创建等于IFF的foo字符串匹配的类。 简单的例子: class A(override val foo:
谁能解释一下下面这部分代码的含义: private event UserChangedHandler m_UserChanged; public event UserChangedHandler Us
(为冗长的设置道歉。这里有一个问题,我保证。) 考虑一个类 Node具有在构建时分配的不可变唯一 ID。此 ID 用于在持久化对象图时进行序列化等。例如,当一个对象被反序列化时,它会根据 ID 针对主
Ruby API说: The eql? method returns true if obj and other refer to the same hash key. 我更改了 Object 的哈希
在我的 Nant 脚本中,我想将属性值与已知字符串进行比较。看完Nant Expressions文档 我相信我可以做一个基本的“==”比较来评估为 bool 值。 但是鉴于脚本块: 执行时,
简化示例: 我最近设置了 Single Table Inheritance在 Animal 上模型。 Cat和 Dog是 Animal 的子类. 我有一个 Animal工厂 : factory :an
如何使用 NHibernate 通过以下测试? 我认为只需覆盖实体类中的 Equals 和 GetHashCode 就足以使其按照我希望的方式工作。显然,对于非常微不足道的“点”对象,为相同的坐标保留
我是一名优秀的程序员,十分优秀!