为什么1..99,999 ==“1”..“99,999”在R中,但100,000!=“100,000”?

在控制台中,继续尝试

> sum(sapply(1:99999, function(x) { x != as.character(x) }))
0

对于1到99999的所有值,“1”== 1,“2”== 2,…,99999 ==“99999”为TRUE.然而,

> 100000 == "100000"
FALSE

为什么R有这种古怪的行为,这是一个错误吗?例如,检查原子字符向量中的每个元素是否实际上都是数字的解决方法是什么?现在我试图检查x == as.numeric(x)是否为每个x,但由于上述问题导致某些数据集失败!

看看as.character(100000).它的值不等于“100000”(自己看看),而R基本上只是告诉你.

as.character(100000)
# [1] "1e+05"

这里,从?比较,R是将关系运算符应用于不同类型的值的规则:

If the two arguments are atomic vectors of different types, one is
coerced to the type of the other, the (decreasing) order of
precedence being character, complex, numeric, integer, logical and
raw.

这些规则意味着当你测试1 ==“1”时,比方说,R首先将LHS上的数值转换为字符串,然后测试LHS和RHS上字符串的相等性.在某些情况下,这些将是平等的,但在其他情况下,他们不会.哪些情况产生不平等将取决于选项(“scipen”)和选项(“数字”)的当前设置

因此,当您键入100000 ==“100000”时,就好像您实际执行了以下测试一样. (注意,在内部,R可能/可能确实使用与as.character()不同的东西来执行转换):

as.character(100000)=="100000"
# [1] FALSE
https://stackoverflow.com/questions/18964562/why-does-1-99-999-1-99-999-in-r-but-100-000-100-000

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:为什么1..99,999 ==“1”..“99,999”在R中,但100,000!=“100,000”?