2011-08-08 33 views
4

R出力を2つのバイナリファイル、インデックスファイル、およびメインデータファイルに書き込むように求められます。インデックスファイルの各idに対応する1つの行列/ブロックが存在します。私はインターネット上のRでバイナリファイルを書くことについて読んだことがありますが、私はこの形式を達成できるように形式を指定する方法がわかりません。バイナリファイルをRに書き込む

また、Rには短い整数を指定できますか?彼は、短期間の短期間(2バイト)であることを望んでいると言いました。私はそれが意味することを望んでいません。

私は入力を感謝します!ありがとう

+1

StackOverflowの上で '[R]バイナリfile'を使用してクイック検索は、以下の非常によく似た質問を明らかに:http://stackoverflow.com/q/1635278/602276 – Andrie

+1

@mdsummerが書いているように、あなたはサイズ2の整数を書く方法を指定することができますが、問題文はあいまいです。行列データは整数かids整数かあるいは、idは文字列ですか? – Tommy

+0

ようこそStackOverflowへ!ここでの答えの1つが必要なものであれば、答えとしてマークする必要があります。それ以外の場合は、質問を更新して必要なものを明確にしてください。また、あなたが好きな回答(および質問)をupvoteする必要があります。左上のスコアをクリックするだけです! – Tommy

答えて

1

help(writeBin)、size = 2は各要素(2バイト整数)への割り当てを定義します。しかし、これが何を意味するのか分からなければ、おそらくあなたのリクエスタからもっと多くの情報が必要になるでしょう。

3

問題を明確に指定していないため、以下のサンプルコードでいくつかの前提を設定しました。行列のリストが与えられると、それらは.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) 
} 
+0

+1いい例。 – Iterator

関連する問題