簡體   English   中英

在 R 中,如何識別我的逆距離矩陣中包含 INFINITE 值的特定單元格?

[英]In R, how can I identify the specific cells that contain INFINITE values in my inverse distance matrix?

上下文:我使用猿 package 來計算 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()不會在矩陣中找到無限值。

嚴重的是一個矯枉過正的解決方案,但這可以非常靈活和通用,可以做許多其他事情。

    library(tidyverse)

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

答案:為了識別在逆距離矩陣中包含 INFINITE 值的特定單元格,我使用了...

其中(是.infinite(inv.coord.distances))

正如 [dww] 所建議的那樣。

要將返回的單元格轉換為其行和列,請將值除以行中的列數。 整數是行號。 接下來,將剩余的比例乘以一行中的列數。 這標識了列。

例如,1008 是我的四個包含 INF 值的單元格之一。 1008/93 = 10.83871。 此單元格位於第 10 行第 78 列(因為 0.83871* 93 = 78.00003)。

[OftenOverkilledSolutions] 提供的 tidyverse 解決方案還應該揭示有問題的單元格:

as_tibble(inv.coord.distances) %>% mutate(row = row_number()) %>% gather(Column,Value,-row) %>% filter(is.na(Value)) #或者這里的一些其他條件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM