簡體   English   中英

在R中寫二進制文件

[英]Write binary file in R

我被要求在兩個二進制文件,索引文件和主數據文件中寫入R輸出。 將有一個矩陣/塊對應於索引文件中的每個id。 我已經讀過關於在互聯網上寫R的二進制文件,但我不知道如何指定格式以便我可以實現這種格式?

另外,我們可以在R中指定短整數嗎? 他說他希望數字是短暫的間隔(兩個字節),我不想要這意味着什么。

我感謝任何輸入! 謝謝

由於您沒有非常明確地指出問題,我在下面的示例代碼中做了一些假設。 給定矩陣列表,它將它們保存到.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)
}

請參閱help(writeBin),size = 2定義每個元素的分配(即兩個字節的整數)。 但如果您不知道這意味着什么,您可能需要來自請求者的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM