【问题标题】:write array to .bin file in R将数组写入R中的.bin文件
【发布时间】:2017-04-21 11:13:25
【问题描述】:

嘿,我正在尝试将 R 中的 3 维数组写入 .bin 文件,以便稍后从 FORTRAN 调用它。

我使用以下方法:

my.array <- array(1:36, dim=c(3,4,3)) 

zz <- file("new.bin", "wb")
writeBin (my.array,zz, size = 8 )
close(zz)

但这会产生错误消息:

Error in writeBin(my.array, zz, size = 8) : can only write vector objects

我想如果我将数组展平为矢量

writeBin (as.vector(my.array),zz, size = 8 )

writeBin 运行时没有错误消息,我可以将文件读取到 FORTRAN(请参阅 How to write .bin file in R and open it in Fortran

但是,我有兴趣保留对象的结构,因为我将使用巨大的数组。

在 R 中是否有写入 .bin 的方法来保留对象结构?

【问题讨论】:

    标签: arrays r binaryfiles


    【解决方案1】:

    二进制数据没有“结构”。如果你希望对象的结构在二进制数据中,你需要手动添加一些东西。例如,您可以在文件开头添加一些数据。

    第一个数字将是维度的数量,D。然后接下来的 D 数字将是每个维度的大小。剩下的字节是数据。

    因此,您的示例将如下所示:

    writeBin(c(length(dim(my.array)), dim(my.array), my.array), raw(), size = 8)
      [1] 03 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 03
     [26] 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 03 00
     [51] 00 00 00 00 00 00 04 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 06 00 00
     [76] 00 00 00 00 00 07 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 09 00 00 00
    [101] 00 00 00 00 0a 00 00 00 00 00 00 00 0b 00 00 00 00 00 00 00 0c 00 00 00 00
    [126] 00 00 00 0d 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 0f 00 00 00 00 00
    [151] 00 00 10 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 12 00 00 00 00 00 00
    [176] 00 13 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00
    [201] 16 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 19
    [226] 00 00 00 00 00 00 00 1a 00 00 00 00 00 00 00 1b 00 00 00 00 00 00 00 1c 00
    [251] 00 00 00 00 00 00 1d 00 00 00 00 00 00 00 1e 00 00 00 00 00 00 00 1f 00 00
    [276] 00 00 00 00 00 20 00 00 00 00 00 00 00 21 00 00 00 00 00 00 00 22 00 00 00
    [301] 00 00 00 00 23 00 00 00 00 00 00 00 24 00 00 00 00 00 00 00
    

    在您的 Fortran 代码中,您将读取第一个数字以查找维度总数 D。然后您将读取接下来的 D 数字以查找大小或每个维度。现在您可以在 Fortran 中分配结构并读取剩余数据以填充所有元素。

    【讨论】:

    • 我了解二进制数据未格式化。但据我了解,您的建议仍然需要在将数组写入 R 中的 .bin 之前将其展平?
    • 是的,您必须先将其转换为矢量。否则你会收到一个错误,“只能写向量对象”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多