我有一个完全由integer64
我想转换为矩阵的列组成的数据框。
library(bit64)
(dfr <- data.frame(x = as.integer64(10^(9:18))))
## x
## 1 1000000000
## 2 10000000000
## 3 100000000000
## 4 1000000000000
## 5 10000000000000
## 6 100000000000000
## 7 1000000000000000
## 8 10000000000000000
## 9 100000000000000000
## 10 1000000000000000000
不幸的是,as.matrix
没有给出正确的答案。
(m <- as.matrix(dfr))
## x
## [1,] 4.940656e-315
## [2,] 4.940656e-314
## [3,] 4.940656e-313
## [4,] 4.940656e-312
## [5,] 4.940656e-311
## [6,] 4.940656e-310
## [7,] 4.940656e-309
## [8,] 5.431165e-308
## [9,] 5.620396e-302
## [10,] 7.832953e-242
问题似乎是integer64
值被存储为具有“integer64”类属性的数值(加上一些使它们正确打印和执行算术的魔法),该属性被as.matrix
.
我不能这样做class(m) <- "integer64"
,因为这会改变矩阵对象的类而不是它的内容。
同样,mode(m) <- "integer64"
给出错误的答案typeof(m) <- "integer64"
并storage.mode(m) <- "integer64"
抛出错误。
当然,我可以通过将列转换为双 ( dfr$x <- as.double(dfr$x)
) 来规避这个问题,但感觉应该有一种方法可以正确地做到这一点。
如何获得integer64
值矩阵?