readMat()を使用してRに複数のデータ構造を* .matファイルとして保存する際に問題が発生しています。Rが大量の負の乱数に変換されています
Rでファイルを読み込んで開くと、データ構造に格納されている1つの列の内容が(明らかに)ランダムに変更されます(たとえば、1504615865460506で-1372641510)。また、元の* .matファイルの数字は増加しています(1番目は1484649519139343、2番目は1484649519142687など)。対応する数字は減少しています(1番目は-1372641510、2番目は-1372633137など)。他の変数には変更は起こっていません。
"wronged"変数は、データポイントが記録された正確な時刻を示すプログレッシブ数値であるTimeStampです。これは、リストの一部である列に格納され、さらに大きなリストの一部になります。 class()によると 'integer'です。 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.
これは、第3リストの構成の一例である:
# $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)
1504615865460506は、Rの有効な整数の範囲外です。追加のサイズの64ビット整数を利用できるようにする 'bit64'パッケージをチェックしてください。 – Mako212
値を変更する「ちょうどR」の場合は、単純に整数ではなく倍精度に変換すると予想されます。他に奇妙なことが起こっているという事実は、R.matlabパッケージのコードが他の特定の方法でそれらを誤って扱っていることを示唆しています。 – joran