提问人:JoeF 提问时间:11/19/2014 最后编辑:HenrikJoeF 更新时间:1/8/2019 访问量:1570
为什么 R 中的“一”< 2 等于 FALSE?
Why does "one" < 2 equal FALSE in R?
问:
我正在阅读 Hadley Wickham 关于胁迫的高级 R 部分,我无法理解这种比较的结果:
"one" < 2
# [1] FALSE
我假设 R 强制 2 到一个字符,但我不明白为什么 R 返回而不是返回错误。这对我来说尤其令人费解,因为FALSE
-1 < "one"
# TRUE
所以我的问题有两个方面:首先,为什么会有这个答案,其次,有没有办法看到 R 如何转换逻辑向量中的各个元素,就像这些例子一样?
答:
9赞
OganM
11/19/2014
#1
它强制 2 进入一个字符,然后进行字母比较。数字字符假定在字母字符之前
要大致了解该行为,请尝试
'a'<'1'
'1'<'.'
'b'<'B'
'a'<'B'
'A'<'B'
'C'<'B'
评论
1赞
Ben Bolker
11/19/2014
我想知道是否有任何通用的(即跨区域设置的通用)保证数字在排序顺序中的字母字符之前?
0赞
JoeF
11/19/2014
谢谢。我会将这个和 jdharrison 的那个标记为都是正确的,但似乎我只能以这种方式标记其中一个。
17赞
jdharrison
11/19/2014
#2
从:help("<")
如果这两个参数是不同类型的原子向量,则一个是 强制到另一个的类型,(递减的)优先顺序 是字符、复杂、数字、整数、逻辑和原始。
因此,在这种情况下,数字的优先级低于字符。所以被胁迫到角色.字符向量中字符串的比较是词典编纂的,据我所知,它是按字母顺序排列的,但取决于语言环境。2
"2"
评论
sort(c("one","2","-1","10"))
"10"<"2"
)'\t9999' < " 00000"