gpt4 book ai didi

R:序列化不完全匹配的文本的base64编码/解码

转载 作者:行者123 更新时间:2023-12-04 11:58:19 27 4
gpt4 key购买 nike

在我的 previous question关于使用 serialize() 创建对象的 CSV 我从 jmoy 那里得到了一个很好的答案,他推荐了我的序列化文本的 base64 编码。这正是我要找的。奇怪的是,当我尝试将其付诸实践时,我得到的结果看起来不错,但与我在序列化/编码过程中运行的结果并不完全匹配。

下面的示例采用包含 3 个向量的列表并序列化每个向量。然后每个向量都经过 base64 编码并与 key 一起写入文本文件。键只是向量的索引号。然后我反转这个过程并从 csv 中读回每一行。在最后您会看到一些项目不完全匹配。这是一个 float 问题吗?还有别的吗?

require(caTools)

randList <- NULL
set.seed(2)

randList[[1]] <- rnorm(100)
randList[[2]] <- rnorm(200)
randList[[3]] <- rnorm(300)

#delete file contents
fileName <- "/tmp/tmp.txt"
cat("", file=fileName, append=F)

i <- 1
for (item in randList) {
myLine <- paste(i, ",", base64encode(serialize(item, NULL, ascii=T)), "\n", sep="")
cat(myLine, file=fileName, append=T)
i <- i+1
}

linesIn <- readLines(fileName, n=-1)

parsedThing <- NULL
i <- 1
for (line in linesIn){
parsedThing[[i]] <- unserialize(base64decode(strsplit(linesIn[[i]], split=",")[[1]][[2]], "raw"))
i <- i+1
}

#floating point issue?
identical(randList, parsedThing)

for (i in 1:length(randList[[1]])) {
print(randList[[1]][[i]] == parsedThing[[1]][[i]])
}

i<-3
randList[[1]][[i]] == parsedThing[[1]][[i]]

randList[[1]][[i]]
parsedThing[[1]][[i]]

这里是删节的输出:

> #floating point issue?
> identical(randList, parsedThing)
[1] FALSE
>
> for (i in 1:length(randList[[1]])) {
+ print(randList[[1]][[i]] == parsedThing[[1]][[i]])
+ }
[1] TRUE
[1] TRUE
[1] FALSE
[1] FALSE
[1] TRUE
[1] FALSE
[1] TRUE
[1] TRUE
[1] FALSE
[1] FALSE
...
>
> i<-3
> randList[[1]][[i]] == parsedThing[[1]][[i]]
[1] FALSE
>
> randList[[1]][[i]]
[1] 1.587845
> parsedThing[[1]][[i]]
[1] 1.587845
>

最佳答案

ascii=T 在您对 serialize 的调用中使 R 在序列化和反序列化时进行不精确的二进制-十进制-二进制转换,从而导致值不同。如果您删除 ascii=T,您会得到与现在完全相同的数字,它是写出的二进制表示形式。

base64encode 可以对原始向量进行编码,因此不需要 ascii=T

serialize 使用的二进制表示是 architecture independent ,因此您可以愉快地在一台机器上序列化并在另一台机器上反序列化。

引用:http://cran.r-project.org/doc/manuals/R-ints.html#Serialization-Formats

关于R:序列化不完全匹配的文本的base64编码/解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com