Description Usage Arguments Details Value See Also Examples
Functions to unpack/pack (read/write) foreign C data types from/to R atomic vectors and C data objects such as arrays and pointers to structures.
1 2 |
x |
atomic vector (logical, raw, integer or double) or external pointer. |
offset |
integer specifying byte offset starting at 0. |
sigchar |
character string specifying the C data type by a type signature. |
value |
R object value to be coerced and packed to a foreign C data type. |
The function .pack
converts an R value
into a C data type specified by the signature sigchar
and it writes the raw C foreign data value at byte position offset
into the object x
.
The function .unpack
extracts a C data type according to the signature sigchar
at byte position offset
from the object x
and converts the C value to an R value and returns it.
Byte offset
calculations start at 0 relative to the first byte in an atomic vectors data area.
If x
is an atomic vector, a bound check is carried out before read/write access.
Otherwise, if x
is an external pointer, there is only a C NULL pointer check.
.unpack
returns a read C data type coerced to an R value.
.dyncall
for details on type signatures.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # transfer double to array of floats and back, compare precision:
n <- 6
input <- rnorm(n)
buf <- raw(n*4)
for (i in 1:n) {
.pack(buf, 4*(i-1), "f", input[i])
}
output <- numeric(n)
for (i in 1:n) {
output[i] <- .unpack(buf, 4*(i-1), "f")
}
# difference between double and float
difference <- output-input
print( cbind(input,output,difference) )
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.