在 R 中,如何识别在我的逆距离矩阵中包含 INFINITE 值的特定单元格?
In R, how can I identify the specific cells that contain INFINITE values in my inverse distance matrix?
上下文: 我正在使用 ape 包计算 Moran's I,蚕食确定的程序 here。我不断收到此错误:
Error in if (obs <= ei) 2 * pv else 2 * (1 - pv) : missing value
where TRUE/FALSE needed
根据 Stack Overflow and the Internet,我发现一些建议表明此错误可能是由于具有无限值或 NA 值造成的。当我 运行 sum(is.infinite(inv.coord.distances)) 我仍然得到四个无限值。使用 sum(is.na())、sum(is.nan()) 和 sum.is(null()) returns 这些潜在问题为零。当我手动搜索我的 93x93 矩阵时,我没有看到任何 INF 值,尽管这种方法不是万无一失的。尽管如此,我不断收到此错误,并且我的 sum(is.infinite()) 操作不断告诉我有四个无限值。无论我使用 UTM 还是纬度和经度,都会发生这种情况。
我的问题:是否有命令 returns 矩阵中所有无限值的单元格位置?我尝试了 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 值的特定单元格,我使用了...
which(is.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)) #Or some other condition here
上下文: 我正在使用 ape 包计算 Moran's I,蚕食确定的程序 here。我不断收到此错误:
Error in if (obs <= ei) 2 * pv else 2 * (1 - pv) : missing value where TRUE/FALSE needed
根据 Stack Overflow and the Internet,我发现一些建议表明此错误可能是由于具有无限值或 NA 值造成的。当我 运行 sum(is.infinite(inv.coord.distances)) 我仍然得到四个无限值。使用 sum(is.na())、sum(is.nan()) 和 sum.is(null()) returns 这些潜在问题为零。当我手动搜索我的 93x93 矩阵时,我没有看到任何 INF 值,尽管这种方法不是万无一失的。尽管如此,我不断收到此错误,并且我的 sum(is.infinite()) 操作不断告诉我有四个无限值。无论我使用 UTM 还是纬度和经度,都会发生这种情况。
我的问题:是否有命令 returns 矩阵中所有无限值的单元格位置?我尝试了 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 值的特定单元格,我使用了...
which(is.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)) #Or some other condition here