我有一个包含数千个坐标值的矩阵。我想要的只是找到所选值的索引。我用这个:
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
答案 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