R将大数字转为负随机数

时间:2017-10-10 15:37:26

标签: r import mat

使用readMat()导入保存为* .mat文件的R多个数据结构时遇到问题。

当我在R中读取并打开文件时,存储在数据结构中的单个列的内容(显然)随机变化(例如,应为1504615865460506,并且为-1372641510)。此外,原始* .mat文件中的数字正在增加(第一个是1484649519139343,第二个是1484649519142687等),而在R中相应的数字正在减少(第一个是-1372641510,第二个是-1372633137等)。其他变量没有发生变化。

“wronged”变量是TimeStamp,一个渐进数字,表示记录数据点的确切时间。它存储在列中,列表的一部分,甚至更大的列表的一部分。根据class(),它是'整数'。 我读了readMat()文档,虽然我找不到任何相关的东西。如果问题是大数字,我设置选项(数字= 20),没有效果。

任何想法/建议将不胜感激!

我附上我的代码。

library(R.matlab)
setwd("C:/Path") 
options(digits=20)
temp = list.files(pattern="*.mat") 
list2env(lapply(setNames(temp, make.names(gsub("*.mat$", "", temp))), readMat), envir = .GlobalEnv) 
rm(temp) 
listAll<-list(mget(ls())) #listAll contains all the *.mat files.



listAll[[1]][[3]] #listAll contains N lists == N of *.mat files. 

这是第三个列表的结构示例:

# $data
# , , 1
# 
# [,1]   
# ID          "A6001"
# TimePoint   "10"   
# MainBuffer  List,12
# TimeBuffer  List,12 #TimeBuffer is the Time Stamp. 

TimeBuffer包含12个列表,对应12个试验。每个试验都有1列,这是一个在过程中不情愿地改变的列。

# EventBuffer List,12
# Log         List,12
# 
# 
# attr(,"header")
# attr(,"header")$description
# [1] "MATLAB 5.0 MAT-file, Platform: MACI64, Created on: Wed Sep 20 16:03:45 2017                                         "
# 
# attr(,"header")$version
# [1] "5"
# 
# attr(,"header")$endian
# [1] "little"

listAll[[1]][[3]][[1]][[4]][[3]][[1]][1,][1]

#[1] 668725504 (and should be 1480500650907453)

1 个答案:

答案 0 :(得分:1)

  

应为1504615865460506,例如为-1372641510

看起来像是一个溢出错误。

来自R的help(integer)

  

注意,R的当前实现使用32位整数作为整数向量,因此可表示整数的范围被限制为大约+/- 2 * 10 ^ 9:'double'可以精确地保存更大的整数。 / em>的

因此,您需要为问题值使用较大的类型,例如double