[英]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 Overflow和Internet上扎根,我發現了一些建議,即此錯誤可能是由於具有無限值或 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.