R语言中,判断相等

首先是从别人那里偷来的例子:

> x <- c(0,1,1,0,1)
> y <- c(1,0,1,0,1)


> x %in% y  # 这种算法是判断x的每个元素是否在y中出现。
[1] TRUE TRUE TRUE TRUE TRUE


> x == y  # 判断每个相对应的元素是否相等。
[1] FALSE FALSE  TRUE  TRUE  TRUE

这里,对于logic vector,可以用which函数选出true的值的下标:

>which(x==y)

[1] 2 3 4

这个方法很简单,但是有精度问题,比如/x *x 这个操作后,可能和原结果就不等了

于是有下面这个函数:

近似相等

all.equal(x,y):可以设置容忍的误差值,用于近似比较

x,y,可以是list,vector

返回mae

e.g. isTrue(all.equal(x,y))

########################

all.equal(target, current, ...)
## S3 method for class ’numeric’
all.equal(target, current,
tolerance = .Machine$double.eps ^ 0.5,
scale = NULL, check.attributes = TRUE, ...)
Arguments
target:

  R object.
current:

  other R object, to be compared with target.
... Further arguments for different methods, notably the following two, for numerical
comparison:
tolerance:

numeric >= 0. Differences smaller than tolerance are not considered.

scale:

  numeric scalar > 0 (or NULL). See ‘Details’.
check.attributes:

logical indicating if the attributes(.) of target and current should be
compared as well.
check.names:

 logical indicating if the names(.) of target and current should be compared
as well (and separately from the attributes).

######


精确相等:

identical(x,y):语法类似以上

在 R 语言中,判断两个数是否相等可以通过多种方法实现。以下是几种常用的方式: ### 1. 使用 `==` 运算符 最简单的方法是使用双等于号 (`==`) 来比较两个数是否相等。需要注意的是,由于浮点数精度问题,在某些情况下可能会得到意外的结果[^1]。 ```r x <- 0.1 + 0.2 y <- 0.3 if (x == y) { print("x 和 y 相等") } else { print("x 和 y 不相等") } ``` 然而,对于涉及浮点运算的情况,推荐采用更稳健的解决方案。 --- ### 2. 使用 `all.equal()` 函数 为了应对浮点数计算带来的误差问题,可以使用 `all.equal()` 函数来检测两数是否接近相等。此函数允许一定的容忍度(默认为 `.Machine$double.eps ^ 0.5`),从而避免因微小差异而导致误判[^2]。 ```r result <- all.equal(x, y) if (isTRUE(result)) { print("x 和 y 接近相等") } else { print(paste("x 和 y 不相等:", result)) } ``` 注意:单独使用 `all.equal()` 可能会返回描述性的字符串而非逻辑,因此需结合 `isTRUE()` 或其他条件语句一起使用。 --- ### 3. 自定义绝对差法 另一种方式是手动设置一个可接受的小范围偏差(tolerance level),并通过检查两者之间的差距是否在此范围内完成判定操作。 ```r tolerance <- .Machine$double.eps^0.5 if (abs(x - y) <= tolerance) { print("x 和 y 在指定公差内视为相等") } else { print("x 和 y 超过指定公差,不相等") } ``` 这种方法提供了更大的灵活性,可以根据具体应用场景调整容错标准。 --- ### 4. 特殊情况下的整型与逻辑型对比 当涉及到整型或布尔类型的变量时,可以直接利用其特性进行高效且精准的匹配测试。例如: ```r a <- TRUE b <- FALSE print(a == b) # 输出FALSE ``` 此类基本数据类型间的比较一般不会受到舍入错误的影响。 --- 尽管以上列举了几种不同的技术手段供开发者选用,但在实际编码过程中仍需依据项目需求选取最适合的技术路线加以实施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值