如何使用R中的which()函数从数值矩阵中检索值?

如何使用R中的which()函数从数值矩阵中检索值?,r,matrix,R,Matrix,我有一个数字矩阵,我想从中检索给定特定值的索引。 我正在尝试使用which()函数查找矩阵中的值 问题是有些值被找到了,有些值没有找到 我的矩阵如下: x_lat <- as.double(seq(48.0 ,60.0, by=0.1)) y_long <- as.double(seq(-10.0 ,2.0, by=0.1)) xv <- as.double(rep(x_lat,each = 121)) yv <- as.double(rep(y_long, 12

我有一个数字矩阵,我想从中检索给定特定值的索引。 我正在尝试使用
which()
函数查找矩阵中的值

问题是有些值被找到了,有些值没有找到

我的矩阵如下:

x_lat <- as.double(seq(48.0  ,60.0,  by=0.1))
y_long <- as.double(seq(-10.0 ,2.0,   by=0.1))
xv <- as.double(rep(x_lat,each = 121))
yv <- as.double(rep(y_long, 121))

vMatrix <- as.matrix(cbind(xv,yv))

x_lat浮点数可能会产生误导。两个这样的数字通常不“相等”,即使控制台可能显示相同的输出。这台机器只有一定的准确度才能表示数字

下面是一个简单的例子:

a <- 0.15 - 1/8 
b <- 0.025
> a
[1] 0.025
> b
[1] 0.025
这是因为浮点运算产生的差异超出了机器的精度:

> a-b
[1] -6.938894e-18
可能您可以通过简单地将矩阵中的数字四舍五入到必要的相关位数来解决此问题,例如

xx<- which(round(vMatrix,3)==-2.2,arr.ind=TRUE)

xx浮点数可能会产生误导。两个这样的数字通常不“相等”,即使控制台可能显示相同的输出。这台机器只有一定的准确度才能表示数字

下面是一个简单的例子:

a <- 0.15 - 1/8 
b <- 0.025
> a
[1] 0.025
> b
[1] 0.025
这是因为浮点运算产生的差异超出了机器的精度:

> a-b
[1] -6.938894e-18
可能您可以通过简单地将矩阵中的数字四舍五入到必要的相关位数来解决此问题,例如

xx<- which(round(vMatrix,3)==-2.2,arr.ind=TRUE)

xxv矩阵上的值只有一个小数,所以我认为将它们四舍五入到更高的小数位数是没有意义的。我现在明白这有什么意义了。谢谢使用
舍入
不是比较数字与浮点公差的好方法
all.equal
实现了一种更好的方法。更多详细信息:@KonradRudolph感谢您的精彩参考。.在本例中,我需要以不同的方式使用
which()
实现
all.equal()
,但这是另一个问题。事实证明,我可以使用
all.equal
which()
循环遍历矩阵,提示是参考的结尾。。。因此
其中(mapply(函数(x,y){isTRUE(all.equal(x,y))},round(vMatrix[,2],3),-2.2),arr.ind=TRUE)
同样有效矩阵上的值只有一个小数,所以我认为将它们四舍五入到更高的小数位数没有意义。我现在明白这有什么意义了。谢谢使用
舍入
不是比较数字与浮点公差的好方法
all.equal
实现了一种更好的方法。更多详细信息:@KonradRudolph感谢您的精彩参考。.在本例中,我需要以不同的方式使用
which()
实现
all.equal()
,但这是另一个问题。事实证明,我可以使用
all.equal
which()
循环遍历矩阵,提示是参考的结尾。。。因此<代码>其中(mapply(函数(x,y){isTRUE(all.equal(x,y))},round(vMatrix[,2],3),-2.2),arr.ind=TRUE)
也起作用