为什么as.character(1)=as.numeric(1)是真的?

为什么as.character(1)=as.numeric(1)是真的?,r,R,正如标题所说,为什么“1”==1是真的?这背后的真正原因是什么?R是想表现得善良还是别的什么?我一直在想,从“1”(或任何数字,其实都不重要)开始,R将其作为字符读取,如果与as.numeric(1)或as.integer(1)进行比较,它会自动返回FALSE 或 我想这是一个简单的问题,但我想得到答案。谢谢。根据?= 对于数值和复数值,请记住==和!=不允许分数的有限表示,也不允许舍入误差。使用all.equal和idential几乎总是可取的。 在另一段中,它也被写了出来 x、 y 已为其编

正如标题所说,为什么
“1”==1
是真的?这背后的真正原因是什么?R是想表现得善良还是别的什么?我一直在想,从“1”(或任何数字,其实都不重要)开始,R将其作为字符读取,如果与
as.numeric(1)
as.integer(1)
进行比较,它会自动返回FALSE


我想这是一个简单的问题,但我想得到答案。谢谢。

根据
?=

对于数值和复数值,请记住==和!=不允许分数的有限表示,也不允许舍入误差。使用all.equal和idential几乎总是可取的。

在另一段中,它也被写了出来

x、 y
已为其编写方法的原子向量、符号、调用或其他对象。如果两个参数是不同类型的原子向量,则一个强制为另一个的类型,优先顺序(递减)为字符、复数、数字、整数、逻辑和原始


根据
?==

对于数值和复数值,请记住==和!=不允许分数的有限表示,也不允许舍入误差。使用all.equal和idential几乎总是可取的。

在另一段中,它也被写了出来

x、 y
已为其编写方法的原子向量、符号、调用或其他对象。如果两个参数是不同类型的原子向量,则一个强制为另一个的类型,优先顺序(递减)为字符、复数、数字、整数、逻辑和原始


这是因为类型强制。您可以使用
idential
idential(as.character(1)、as.numeric(1))[1]FALSE检查
all.equal(as.character(1)、as.numeric(1))
捕获差异。@akrun谢谢。我明白了,所以R尝试将对象强制为不同的类型,以便它可以“工作”。sindri明白了,谢谢你。这是因为类型强制。您可以使用
idential
idential(as.character(1)、as.numeric(1))[1]FALSE检查
all.equal(as.character(1)、as.numeric(1))
捕获差异。@akrun谢谢。我明白了,所以R尝试将对象强制为不同的类型,以便它可以“工作”。辛德里明白了,谢谢你。好的,谢谢你。阿克伦,我没有意识到这一点。我会在stack允许的情况下接受答案!好的,谢谢你,阿克伦,我没有意识到这一点。我会在stack允许的情况下接受答案!
> as.character(1) == as.numeric(1)
[1] TRUE
> "1" == 1
[1] TRUE
identical(as.character(1), as.numeric(1))
#[1] FALSE