問題を明確に指定していないため、以下のサンプルコードでいくつかの前提を設定しました。行列のリストが与えられると、それらは.bin
ファイルに保存され、オフセット付きの.idx
ファイルが作成されます。それで、インデックスを与えれば、それらを再び読み込むことができます。あなたが言及した2バイトのサイズは使用されません - それは8バイトの倍数または4バイトの整数として(しかしあなたはそれを変更することができます)マトリックスデータを保存します。
mtx <- list(matrix(1:12,4), matrix(sin(1:12),4))
saveMatrixList("c:/foo", mtx)
loadMatrix("c:/foo", 1)
loadMatrix("c:/foo", 2)
...と、ここでの機能は以下のとおりです:ここ
は、それが使われている方法です
saveMatrixList <- function(baseName, mtxList) {
idxName <- paste(baseName, ".idx", sep="")
idxCon <- file(idxName, 'wb')
on.exit(close(idxCon))
dataName <- paste(baseName, ".bin", sep="")
con <- file(dataName, 'wb')
on.exit(close(con))
writeBin(0L, idxCon)
for (m in mtxList) {
writeBin(dim(m), con)
writeBin(typeof(m), con)
writeBin(c(m), con)
flush(con)
offset <- as.integer(seek(con))
cat('offset', offset)
writeBin(offset, idxCon)
}
flush(idxCon)
}
loadMatrix <- function(baseName = "data", index) {
idxName <- paste(baseName, ".idx", sep="")
idxCon <- file(idxName, 'rb')
on.exit(close(idxCon))
dataName <- paste(baseName, ".bin", sep="")
con <- file(dataName, 'rb')
on.exit(close(con))
seek(idxCon, (index-1)*4)
offset <- readBin(idxCon, 'integer')
seek(con, offset)
d <- readBin(con, 'integer', 2)
type <- readBin(con, 'character', 1)
structure(readBin(con, type, prod(d)), dim=d)
}
StackOverflowの上で '[R]バイナリfile'を使用してクイック検索は、以下の非常によく似た質問を明らかに:http://stackoverflow.com/q/1635278/602276 – Andrie
@mdsummerが書いているように、あなたはサイズ2の整数を書く方法を指定することができますが、問題文はあいまいです。行列データは整数かids整数かあるいは、idは文字列ですか? – Tommy
ようこそStackOverflowへ!ここでの答えの1つが必要なものであれば、答えとしてマークする必要があります。それ以外の場合は、質問を更新して必要なものを明確にしてください。また、あなたが好きな回答(および質問)をupvoteする必要があります。左上のスコアをクリックするだけです! – Tommy