假设我有这个对象a
:
a <- list(x = 1, y = 2)
我使用以下代码将其序列化并转换为字符串:
s <- serialize(a, NULL)
s2 <- paste0(s, collapse = "")
所以现在我只有s2
,我需要再次获得a
。我这样做,但是我收到了一个错误:
s3 <- substring(s2, seq(1,nchar(s2),2), seq(2,nchar(s2),2))
s4 <- as.raw(s3)
Warning messages:
1: NAs introduced by coercion
2: out-of-range values treated as 0 in coercion to raw
unserialize(s4)
Error in unserialize(s4) : unknown input format
我也试过
> charToRaw(s2) %>% unserialize()
Error in unserialize(.) : unknown input format
我真的需要s2
成为单元素字符向量。
我如何获得a
?
答案 0 :(得分:2)
as.raw
对字符不起作用,您需要先将十六进制数字转换为数字:
s4 = as.raw(as.integer(paste0('0x', s3)))
unserialize(s4)
答案 1 :(得分:0)
这是一个使用@Konrad很好的答案中的技术的dplyr
可重现示例
以一些字符串/字符开头
library(dplyr)
some_string <- 'something 123 something'
序列化
(serialized_char <- some_string %>% serialize(NULL) %>% as.character() %>% paste0(collapse = ""))
[1] "580a000000030003060200030500000000055554462d3800000010000000010004000900000017736f6d657468696e672031323320736f6d657468696e67"
反序列化回字符串/字符
(unserialized <- serialized_char %>%
{substring(., seq(1, nchar(.), 2), seq(2, nchar(.), 2))} %>%
paste0("0x", .) %>%
as.integer %>%
as.raw %>%
unserialize())
[1] "something 123 something"
并确保绝对有效
some_string == unserialized
[1] TRUE