我不知道这是一个integer64(来自bit64)问题,还是一个熔化问题(来自reshape2),但是如果我尝试重塑一个包含integer64数据的data.frame,则该类信息将在处理过程中被破坏,并将其还原为双重表示:

library(bit64)
library(reshape2)

DF = data.frame(I =letters, Num1 = as.integer64(1:26), Num2 = as.integer64(1:26))
DFM = melt(DF, id.vars = "I")

sapply(DF, class)
sapply(DFM, class)

给出:
> sapply(DF, class)
          I        Num1        Num2
   "factor" "integer64" "integer64"
> sapply(DFM, class)
        I  variable     value
 "factor"  "factor" "numeric"

并且因为integer64在其下面是 double 的,所以数据被“损坏”了
> DF
   I Num1 Num2
1  a    1    1
2  b    2    2
3  c    3    3
4  d    4    4
5  e    5    5
...
> DFM
   I variable         value
1  a     Num1 4.940656e-324
2  b     Num1 9.881313e-324
3  c     Num1 1.482197e-323
4  d     Num1 1.976263e-323
5  e     Num1 2.470328e-323
6  f     Num1 2.964394e-323

是什么原因造成的?这是integer64问题还是melt问题?创建类时,可以做些什么来避免这种情况?

最佳答案

这似乎是对该软件包的限制,该软件包的文档here on page 9中也提到了该软件包。例如:

x <- data.frame(a=as.integer64(1:5), b=as.integer64(1:5))
> x
#   a b
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 4
# 5 5 5

> unlist(x)

#            a1            a2            a3            a4            a5            b1
# 4.940656e-324 9.881313e-324 1.482197e-323 1.976263e-323 2.470328e-323 4.940656e-324
#            b2            b3            b4            b5
# 9.881313e-324 1.482197e-323 1.976263e-323 2.470328e-323

> as.matrix(x)
#                  a             b
# [1,] 4.940656e-324 4.940656e-324
# [2,] 9.881313e-324 9.881313e-324
# [3,] 1.482197e-323 1.482197e-323
# [4,] 1.976263e-323 1.976263e-323
# [5,] 2.470328e-323 2.470328e-323

x <- as.integer64(1:5)

> is.vector(x)
# [1] FALSE

> as.vector(x)
# [1] 4.940656e-324 9.881313e-324 1.482197e-323 1.976263e-323 2.470328e-323

关于r - Integer64类无法幸免reshape2融合功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14892857/

10-12 20:20