R 如何为条件all语句设置误差范围

R 如何为条件all语句设置误差范围,r,if-statement,R,If Statement,我试图创建一个条件语句来检查某些值是否都存在于另一个向量中,但我想修改条件语句,以便有一个误差范围来满足与条件的一些偏差(我试图避免浮点)。这里有一个例子 x1= 2.595 x2= 4.231 x3=3.236 x= c(2.592,3.64,3.235, 5.33,4.229) if(all(c(x1,x2,x3) %in% x)){print("pls help")} 关于如何修改上述条件语句以留出一些余地,有什么想法吗?所以x1,x2,x3 不必完全等于x中的任何值,条件才为

我试图创建一个条件语句来检查某些值是否都存在于另一个向量中,但我想修改条件语句,以便有一个误差范围来满足与条件的一些偏差(我试图避免浮点)。这里有一个例子

x1= 2.595

x2= 4.231

x3=3.236

x= c(2.592,3.64,3.235, 5.33,4.229)

if(all(c(x1,x2,x3) %in% x)){print("pls help")}

关于如何修改上述条件语句以留出一些余地,有什么想法吗?所以
x1,x2,x3

不必完全等于
x
中的任何值,条件才为真?

您可以定义
阈值,建立上限和下限,并与这些值进行比较

threshold <- 0.05
lower_limit <- x - threshold
upper_limit <- x + threshold

all(sapply(c(x1, x2, x3), function(y) any(y >= lower_limit & y <= upper_limit)))
#[1] TRUE

阈值您可以定义一个
阈值
,建立一个上限和下限,并与这些值进行比较

threshold <- 0.05
lower_limit <- x - threshold
upper_limit <- x + threshold

all(sapply(c(x1, x2, x3), function(y) any(y >= lower_limit & y <= upper_limit)))
#[1] TRUE

threshold使用相同的公差方法,您可以使用内置公差在%
-类函数中定义自定义的
%:

`%in_tol%` <- function(x, y, tol = .005) colSums(abs(sapply(x,`-`, y)) <= tol) > 0

y <- c(2.595, 4.231, 3.236)
x <- c(2.592, 3.64, 3.235, 5.33, 4.229)

y %in_tol% x
[1] TRUE TRUE TRUE

使用相同的公差方法,您可以使用内置公差在%
-类函数中定义自定义的
%:

`%in_tol%` <- function(x, y, tol = .005) colSums(abs(sapply(x,`-`, y)) <= tol) > 0

y <- c(2.595, 4.231, 3.236)
x <- c(2.592, 3.64, 3.235, 5.33, 4.229)

y %in_tol% x
[1] TRUE TRUE TRUE

这看起来很有希望。请问在这种特殊情况下,
sapply
function(y)
在做什么?我还假设
y
只是一个任意占位符?使用
y
sapply
对每个值
x1
x2
x3
一次迭代一个,是的,
y
只是一个占位符,用于对来自
sapply
的值应用匿名函数。谢谢。最后一个问题:
sapply
一次迭代每个
x1、x2、x3
,但仍然是这样的情况,所有这些对象都必须出现在
x
中(至少在误差范围内),语句才是正确的?是的,因为我们在
sapply
之外使用了
all
<代码>全部(sapply)(c(x1…
所以所有的
x1
x2
x3
都必须在这个范围内才能使这个语句为真。这看起来很有希望。我可以问一下
sapply
函数(y)是什么吗
在这种特殊情况下做了什么?我还假设
y
只是一个任意的占位符正确吗?使用
y
sapply
对每个值迭代
x1
x2
x3
是的,
y
只是一个占位符来应用匿名函数来自
sapply
的值。谢谢。最后一个问题:
sapply
一次迭代每个
x1、x2、x3
,但仍然需要所有这些对象(至少在误差范围内)在
x
中,语句是否正确?是的,因为我们在
sapply
之外使用了
all
all(sapply)(c(x1……
),所以所有
x1
x2
x3
都必须在语句正确的范围内。