一个关于”的问题;相同的();R中的函数?“怎么做?”;相同的();适用于不同类型的对象?
(添加了可复制的示例) 我不能充分理解为什么以下是一个关于”的问题;相同的();R中的函数?“怎么做?”;相同的();适用于不同类型的对象?,r,integer,double,storage,notation,R,Integer,Double,Storage,Notation,(添加了可复制的示例) 我不能充分理解为什么以下是FALSE(我知道它们分别是double和integer): ?相同的显示: num.eq: 逻辑指示是否应使用==('equal')或按位比较(双精度和复数非NA)数字。后者(非违约) 区分-0和+0 sprintf(%.8190f),作为.integer(1))和sprintf(%.8190f,1)返回完全相等的位模式。因此,我认为至少以下一项必须返回TRUE。但是,我在以下各项中得到FALSE: identical(1, as.intege
FALSE
(我知道它们分别是double
和integer
):
?相同的
显示:
num.eq:
逻辑指示是否应使用==('equal')或按位比较(双精度和复数非NA)数字。后者(非违约)
区分-0和+0
sprintf(%.8190f),作为.integer(1))
和sprintf(%.8190f,1)
返回完全相等的位模式。因此,我认为至少以下一项必须返回TRUE
。但是,我在以下各项中得到FALSE
:
identical(1, as.integer(1), num.eq=TRUE) # FALSE
identical(1, as.integer(1), num.eq=FALSE) # FALSE
我现在就这样想:如果代码> SeaTFF是一个符号指示符,而不是存储指示符,那么这意味着基于存储的代码> >相同()/<代码>比较。即
idential(bitpattern1,bitpattern1bitpattern2)
返回FALSE
。我找不到对上述情况的任何其他逻辑解释
我知道,在R的32位/64位体系结构中,整数都存储为32位。它们并不完全相同,因为它们有不同的类型。如果您查看
idential
的文档,您会发现示例idential(1,as.integer(1))
带有注释##FALSE,存储为不同类型
。这是一个线索。报告提醒我们:
单个数字(如4.2)和字符串(如“四点二”)仍然是长度为1的向量;没有更多的基本类型(我的)
所以,基本上所有的东西都是一个带有类型的向量(这也是为什么每当R返回某个东西时,[1]
都会出现的原因)。您可以通过使用vector
显式创建长度为1的向量,然后将其与0
进行比较来检查这一点:
xidential(1,as.numeric(“1”)
产生TRUE
。这可能是一个起点。而且,相同(1L,作为.integer(“1”))
为真well@Kots在两个相同的(…)中,您比较的是相同的东西:“double1 vs double1”和“integer1 vs integer1”。在我的问题中,“double1 vs integer1”是比较的。那么我想你有你的答案了。谢谢。你系统地解释了我想要的一切。
identical(1, as.integer(1), num.eq=TRUE) # FALSE
identical(1, as.integer(1), num.eq=FALSE) # FALSE