R 正在将大数转换为负随机数
R is turning large numbers to negative random numbers
我在使用 readMat() 将保存为 *.mat 文件的多个数据结构导入 R 时遇到问题。
当我在 R 中读取和打开文件时,存储在数据结构中的单个列的内容(显然)随机变化(例如应该是 1504615865460506 和 -1372641510)。此外,原始 *.mat 文件中的数字正在增加(第一个是 1484649519139343,第二个是 1484649519142687 等),而在 R 中相应的数字正在减少(第一个是 -1372641510,第二个是 -1372633137 等)。其他变量没有发生变化。
"wronged" 变量是时间戳,一个渐进数字,表示记录数据点的确切时间。它存储在一个列中,一个列表的一部分,一个更大列表的一部分。根据class()是'integer'。
我阅读了 readMat() 文档,但没有找到任何相关内容。万一问题是大数字,我设置选项(数字= 20),但没有效果。
任何 ideas/suggestions 将不胜感激!
然后附上我的代码。
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)
should be 1504615865460506 and is -1372641510 for example
看起来像溢出错误。
来自 R 中的 help(integer)
:
Note that current implementations of R use 32-bit integers for integer vectors, so the range of representable integers is restricted to about +/-2*10^9: ‘double’s can hold much larger integers exactly.
因此,您需要为相关值使用更大的类型,例如 double
。
我在使用 readMat() 将保存为 *.mat 文件的多个数据结构导入 R 时遇到问题。
当我在 R 中读取和打开文件时,存储在数据结构中的单个列的内容(显然)随机变化(例如应该是 1504615865460506 和 -1372641510)。此外,原始 *.mat 文件中的数字正在增加(第一个是 1484649519139343,第二个是 1484649519142687 等),而在 R 中相应的数字正在减少(第一个是 -1372641510,第二个是 -1372633137 等)。其他变量没有发生变化。
"wronged" 变量是时间戳,一个渐进数字,表示记录数据点的确切时间。它存储在一个列中,一个列表的一部分,一个更大列表的一部分。根据class()是'integer'。 我阅读了 readMat() 文档,但没有找到任何相关内容。万一问题是大数字,我设置选项(数字= 20),但没有效果。
任何 ideas/suggestions 将不胜感激!
然后附上我的代码。
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)
should be 1504615865460506 and is -1372641510 for example
看起来像溢出错误。
来自 R 中的 help(integer)
:
Note that current implementations of R use 32-bit integers for integer vectors, so the range of representable integers is restricted to about +/-2*10^9: ‘double’s can hold much larger integers exactly.
因此,您需要为相关值使用更大的类型,例如 double
。