Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个关于”的问题;相同的();R中的函数?“怎么做?”;相同的();适用于不同类型的对象?_R_Integer_Double_Storage_Notation - Fatal编程技术网

一个关于”的问题;相同的();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
进行比较来检查这一点:


x
idential(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