提问人:jblood94 提问时间:8/5/2023 最后编辑:jblood94 更新时间:8/5/2023 访问量:36
R:与列表“匹配”中的行为不一致
R: Inconsistent behavior in `match` with lists
问:
match
在使用 List 对象时给出不一致的结果:
match(list(c(1, 2)), list(c(1L, 2L)))
#> [1] NA
match(list(c(1, 3)), list(c(1L, 3L)))
#> [1] 1
是什么原因导致了这种情况?match
这不仅仅是 和 之间的区别:integer
numeric
match(c(1, 2), c(1L, 2L))
#> [1] 1 2
match(c(1, 3), c(1L, 3L))
#> [1] 1 2
一些额外的例子。该行为似乎仅以顺序值显示:
match(list(c(100, 101, 102)), list(c(100L, 101L, 102L)))
#> [1] NA
match(list(c(100, 102, 101)), list(c(100L, 102L, 101L)))
#> [1] 1
match(list(c(2, 1)), list(c(2L, 1L)))
#> [1] NA
答:
4赞
one
8/5/2023
#1
原因是 1,2 是连续的整数。
在 的细节部分,它提到:?match
因子、原始向量和列表被转换为字符向量,然后 x 和 table 被强制转换为通用类型(R 排序中的两种类型中的较后者,逻辑<整数<数<复数<字符)。如果不可比性具有正长度,则强制为普通类型。
对于连续的整数,它们被解析为starting number: ending number
as.character(list(c(1L,2L)))
[1] "1:2"
as.character(list(c(100L, 101L, 102L)))
[1] "100:102"
其中作为另一个:
as.character(list(c(1L,3L)))
[1] "c(1, 3)"
as.character(list(c(1,2)))
[1] "c(1, 2)"
评论
0赞
jblood94
8/5/2023
是的,这在比较之前将列表对象转换为字符对象是有意义的。我没有意识到转换会使用冒号表示法,但这也是有道理的。谢谢!match
上一个:使用 %in% 与列表进行匹配
下一个:按矩阵列名称提取矩阵列值
评论