R 3.5.1包含整数64的paste()会损坏值

R 3.5.1包含整数64的paste()会损坏值,r,R,我一直在通过R和RPostgres库生成的报告中跟踪一些“不可能”的数字。代码正在运行许多数据库查询,其中一些恰好返回了BIGINT类型(通过SQLCOUNT()aggregates),默认情况下,RPostgres将其解释为integer64(我正在使用BIGINT=“integer”选项,因为目前没有任何值大于2^31) 我得到了一个非常简单的例子: i <- bit64::as.integer64(1) paste(data.frame(a=i)) 我认为这里的关键是在数据帧上调用

我一直在通过R和
RPostgres
库生成的报告中跟踪一些“不可能”的数字。代码正在运行许多数据库查询,其中一些恰好返回了
BIGINT
类型(通过SQL
COUNT()
aggregates),默认情况下,
RPostgres
将其解释为
integer64
(我正在使用
BIGINT=“integer”
选项,因为目前没有任何值大于2^31)

我得到了一个非常简单的例子:

i <- bit64::as.integer64(1)
paste(data.frame(a=i))

我认为这里的关键是在数据帧上调用
粘贴
,而不是单个值
i
。如果将其解析为数字或整数,则返回1<代码>粘贴(data.frame(a=as.numeric(i))
我读得不够透彻,无法理解为什么有时会在数据帧上奇怪地解析因子,或者(它会改变值)。我并不是说这是事实,但它可能是相关的。我理解这种挫折感,但归根结底,事实上列表原则上可以包含任何类型的对象。事实上,您可能会争辩说,
paste()
在列表对象上是毫无意义的,如果您想将列表元素粘贴在一起,您应该显式地处理对字符的强制,为了安全起见,您可以认为R应该循环遍历每个列表元素,并以正确调用可用S3方法的方式单独强制每个元素,但即使这样做,也不能保证这样的方法存在,因此,您又回到了需要程序员显式地处理它以确保完全安全的状态。当R知道这个对象的类并且在某些地方“做了正确的事情”(即,
print()
将对象的值显示为
1
)但其他地方选择了某种任意的字符串表示时,我觉得很惊讶