首页 > 解决方案 > 在 R 中,如何识别在我的逆距离矩阵中包含 INFINITE 值的特定单元格?

问题描述

上下文:我正在使用 ape 包来计算 Moran's I,蚕食了此处确定的过程。我不断收到此错误:

if (obs <= ei) 2 * pv else 2 * (1 - pv) 中的错误:需要 TRUE/FALSE 的地方缺少值

Stack OverflowInternet上扎根,我发现了一些建议,即此错误可能是由于具有无限值或 NA 值而导致的。当我运行sum(is.infinite(inv.coord.distances))时,我仍然得到四个无限值。使用sum(is.na())sum(is.nan())sum.is(null())返回这些潜在问题的零。当我手动搜索我的 93x93 矩阵时,我看不到任何 INF 值,尽管这种方法不是万无一失的。尽管如此,我不断收到此错误,并且我的 sum(is.infinite()) 操作不断告诉我有四个无限值。无论我使用 UTM 还是纬度和经度,都会发生这种情况。

我的问题:是否有一个命令可以返回矩阵中所有无限值的单元格位置?我试过which(inv.coord.distances != inf),但显然which()不会在矩阵中找到无限值。

标签: rmatrixgeospatialinfinite

解决方案


严重的是一个矫枉过正的解决方案,但这可以非常灵活和通用,可以做许多其他事情。

    library(tidyverse)

    as_tibble(inv.coord.distances) %>% 
       mutate(row = row_number()) %>% 
       gather(Column,Value,-row) %>% 
       filter(is.na(Value)) #Or some other condition here

推荐阅读