9

integer64これが(からbit64)問題なのか、メルト問題(から)なのかわかりませんが、reshape2integer64データを含むdata.frameを再形成しようとすると、クラス情報がプロセスで破棄され、double表現に戻ります。 :

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はその下が二重であるため、データは「破損」しています。

> 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問題ですか?クラスを作成するとき、この種のことを避けるために何ができるでしょうか?

4

3 に答える 3

5

これはパッケージの制限のようですが、これは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
于 2013-02-15T11:28:47.247 に答える
5

クラスをリセットすると、結果が「修正」されるようです。以下を参照してください。ただし、説明で述べたように、数値に。以外のタイプも含まれている場合、これは機能しない可能性がありますinteger64

> class(DFM$value) <- "integer64"
> DFM
   I variable value
1  a     Num1     1
2  b     Num1     2
3  c     Num1     3
于 2013-02-15T11:29:28.930 に答える
3

私も再現できます。

解決策ではありませんが、問題は次のmelt.data.frame関数行で発生するようです。

value <- unlist(unname(data[var$measure]))

あなたの例では、これは次のことにつながります:

unlist(unname(DF[c("Num1","Num2")]))

そして、unlist呼び出しはデータのクラスを変更します。ヘルプページにあるように:

 The output type is determined from the highest type of the
 components in the hierarchy NULL < raw < logical < integer < real
 < complex < character < list < expression, after coercion of
 pairlists to lists.
于 2013-02-15T11:03:59.660 に答える