如何将`raw`转换为R中的整数向量?

时间:2011-08-24 06:54:32

标签: r

我需要通过JRI将原始数据传递回Java,但它不支持原始数据,只支持其他各种矢量类型(例如整数)。如何将原始(字节向量)转换为整数向量?

我尝试将数据作为字符串向量传回,但由于JRI没有正确解码字符串(例如'\ x89'被丢弃为“”),因此会中断。

如果效率更高(未装箱)也会很好。 as.integer不起作用 - 它不返回数组中字符的字节值,更不用说rawToChar为nuls生成“”。

3 个答案:

答案 0 :(得分:4)

更进一步,您可以直接从原始向量读取Bin。所以我们可以:

> raw
[1] 2b 97 53 eb 86 b9 4a c6 6c ca 40 80 06 94 bc 08 3a fb bc f4
> readBin(raw, what='integer', n=length(raw)/4)
[1]  -346843349  -968181370 -2143237524   146576390  -188941510  

答案 1 :(得分:2)

请参阅rawToChar的文档:

  

rawToChar将原始字节转换为单个字符串或a   单字节的字符向量(“0表示”。

当然,一旦你设法将它转到character,你可以通过as.integer方法轻松将其转换为整数,但是cautious

答案 2 :(得分:2)

这个问题很老了,但对于那些(像我一样)在寻找答案时遇到这个问题的人:as.integer(raw.vec)效果很好。

f <- file("/tmp/a.out", "rb")
seek(f, 0, "end")
f.size <- seek(f, NA, "start")
seek(f, 0, "start")
raw.vec <- readBin(f, 'raw', f.size, 1, signed=FALSE)
close(f)
bytes <- as.integer(raw.vec)