为什么我没有使用哪个函数获取矩阵的索引值?

时间:2015-06-29 15:25:31

标签: r matrix

我有一个包含数千个坐标值的矩阵。我想要的只是找到所选值的索引。我用这个:

which(long == -118.1123, arr.ind=TRUE)

但我没有任何价值。我得到的只是空行和列。但是,当我这样做时,我会得到价值。

which(long < -118.1123, arr.ind=TRUE)

我知道这个值存在,因为我手动检查了Rstudio窗格,并使用long [1,2]等打印出值。

dput(long)不适用于矩阵。希望你能帮忙。

根据评论进行诊断

 - long[1,1] 
[1] -118.0981
 - long[1,1]==-118.0981
[1] FALSE

2 个答案:

答案 0 :(得分:2)

矩阵中的数值可能不完全等于-118.1123。它可能包含几个未显示的数字,因为机器的精度要高得多,并且由于最小的舍入误差可能无法获得完美的同一性。

我建议您尝试

which(signif(long,7) == -118.1123, arr.ind=TRUE)

这是一个说明问题的简单示例:

让我们先填充0到1之间随机数的向量:

 v <- runif(100)

然后我们重新定义向量的任意元素,比如元素42,并将其设置为等于pi:

 v[42] <- pi
> v[42]
#[1] 3.141593

但是,如果我们使用“==”测试相等性,结果为FALSE:

 > v[42] == 3.141593
 #[1] FALSE

但是如果我们只考虑前7个有效数字,则可以从向量中提取位置42:

> which(signif(v,7) == 3.141593, arr.ind = T)
#[1] 42

现在,为了解决你的评论,让我们假设你试图在向量v中的所有元素中找到最接近3.141591的数字。我们可以确定这将是元素42,但是{{1应该找出来。这个结果可以用

获得
R

答案 1 :(得分:2)

以下是使用允许忽略“模糊因子”差异的测试的示例:

PyQt4

我的评论建议> M <- matrix(rnorm(10) , 5,2) > M [,1] [,2] [1,] -0.2382021 2.1698010 [2,] -1.1617644 -1.1513516 [3,] 1.3597808 0.9365208 [4,] 0.7460694 -1.7216410 [5,] -0.2413117 -0.1780468 > which(M==-0.2382021, arr.ind=TRUE) row col > which(abs(M - -0.2382021) < 0.0000001, arr.ind=TRUE) row col [1,] 1 1 无法使用all.equal内的矩阵参数。我检查了@ RHertel选择which并确实成功了。

signif