我被要求在兩個二進制文件中寫入R輸出,一個索引文件和一個主數據文件。在索引文件中將有一個對應於每個id的矩陣/塊。我已經閱讀了關於在互聯網上編寫R中的二進制文件,但我不知道如何指定格式,以便我可以實現這種格式?在R中寫入二進制文件
另外,我們可以指定R中的短整數嗎?他說他希望這些數字是短交易(兩個字節),我不希望這意味着什麼。
我很欣賞任何輸入!謝謝
我被要求在兩個二進制文件中寫入R輸出,一個索引文件和一個主數據文件。在索引文件中將有一個對應於每個id的矩陣/塊。我已經閱讀了關於在互聯網上編寫R中的二進制文件,但我不知道如何指定格式,以便我可以實現這種格式?在R中寫入二進制文件
另外,我們可以指定R中的短整數嗎?他說他希望這些數字是短交易(兩個字節),我不希望這意味着什麼。
我很欣賞任何輸入!謝謝
查看幫助(writeBin),size = 2定義了對每個元素的分配(即一個兩字節的整數)。但是,如果你不知道這意味着什麼,那麼你可能需要來自請求者的更多信息。
由於您沒有很清楚地指出問題,所以我在下面的示例代碼中做了一些假設。給定一個矩陣列表,它將它們保存到一個.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)
}
+1不錯的例子。 – Iterator
使用'快速搜索[R]在計算器上的二進制file'揭示了以下非常類似的問題:http://stackoverflow.com/q/1635278/602276 – Andrie
正如@mdsummer寫道,你可以指定如何寫大小爲2的整數,但你的問題語句是相當含糊的。矩陣數據是整數還是IDS整數?或者也許這些ID是字符串? – Tommy
歡迎來到StackOverflow!如果這裏的答案之一是你需要的,你應該將其標記爲答案。否則,更新你的問題,以澄清你需要什麼。你也應該提高你喜歡的答案(和問題)。只需點擊左上角的分數! – Tommy