Rob*_*ski 8 boolean r coercion
在控制台中,继续尝试
> sum(sapply(1:99999, function(x) { x != as.character(x) }))
0
Run Code Online (Sandbox Code Playgroud)
对于通过99999的所有值1, "1" == 1,"2" == 2,...,99999 == "99999"是TRUE.然而,
> 100000 == "100000"
FALSE
Run Code Online (Sandbox Code Playgroud)
为什么R有这种古怪的行为,这是一个错误吗?什么是解决方法,例如,检查原子字符向量中的每个元素是否实际上是数字的?现在我试图检查是否x == as.numeric(x)每个x,但由于上述问题导致某些数据集失败!
Jos*_*ien 14
看看as.character(100000).它的价值不等于"100000"(看看你自己),而R基本上只是告诉你.
as.character(100000)
# [1] "1e+05"
Run Code Online (Sandbox Code Playgroud)
这里,来自?ComparisonR的规则是将关系运算符应用于不同类型的值:
如果两个参数是不同类型的原子向量,则一个被强制为另一个的类型,优先级(递减)顺序为字符,复数,数字,整数,逻辑和原始.
这些规则意味着当您测试1=="1"R 是否首先将LHS上的数值转换为字符串,然后测试LHS和RHS上字符串的相等性时.在某些情况下,这些将是平等的,但在其他情况下,他们不会.什么情况下产生的不平等将取决于当前设置options("scipen")和options("digits")
因此,当您键入时100000=="100000",就好像您实际执行了以下测试.(注意,在内部,R可能/可能确实使用as.character()与执行转换不同的东西):
as.character(100000)=="100000"
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |