【发布时间】:2013-02-15 10:37:51
【问题描述】:
我不知道这是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 问题?在创建类时可以做些什么来避免这种事情?
【问题讨论】:
-
我无法重现您的问题:sapply(DFM, class) 给出了“factor”、“factor”和“integer64”
-
我可以重现它。
-
有趣,那么我们之间有什么不同呢?是否有一些版本信息或其他我可以提供的有用信息?
-
@Corone,看看page 9 here。文档说明了限制,并且清楚地说明了基本 R 函数的一些问题。例如,
is.vector(x=as.integer64(1:5))将返回FALSE! -
@Arun
is.vector是一条红鲱鱼:对于任何具有属性的向量都是错误的。is.atomic是更重要的测试。
标签: r class dataframe reshape2