如何处理R中的二进制字符串?

Tho*_*mas 11 database string r

R无法处理字符中的空字符串(\ 0),是否有人知道如何处理这个?更具体地说,我想使用ODBC或JDBC连接在数据库中存储复杂的R对象.由于复杂的R对象不容易映射到数据帧,因此我需要一种不同的方式来存储这些对象.对象可以是例如:

library(kernlab)
data(iris)
model <- ksvm(Species ~ ., data=iris, type="C-bsvc", kernel="rbfdot", kpar="automatic", C=10) 
Run Code Online (Sandbox Code Playgroud)

因为> model <不能直接存储在数据库中,所以我使用serialize()函数来检索对象的二进制表示(以便将其存储在BLOB列中):

 serialModel <- serialize(model, NULL)
Run Code Online (Sandbox Code Playgroud)

现在我想通过ODBC/JDBC存储它.为此,我需要对象的字符串表示,以便向数据库发送查询,例如INSERT INTO.由于结果是原始向量类型的向量,我需要转换它:

 stringModel <- rawToChar(serialModel)
Run Code Online (Sandbox Code Playgroud)

还有一个问题:

Error in rawToChar(serialModel) : 
  embedded nul in string: 'X\n\0\0\0\002\0\002\v\0......
Run Code Online (Sandbox Code Playgroud)

R无法在字符串中处理\ 0.有没有人知道如何绕过这个限制?或者是否有可能采用完全不同的方法来实现这一目标?

提前致谢

Jor*_*eys 11

你需要

stringModel <- as.character(serialModel)
Run Code Online (Sandbox Code Playgroud)

用于原始位代码的字符表示.rawToChar将尝试转换原始位代码,在这种情况下,这不是您想要的.

生成的stringModel稍后可以通过以下方式转换回原始模型:

newSerialModel <- as.raw(as.hexmode(stringModel))
newModel <- unserialize(newSerialModel)
all.equal(model,newModel)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

关于通过RODBC将二进制类型写入数据库:至于今天,RODBC插图读取(第11页):

二进制类型目前只能这样读取,它们作为"ODBC二进制"类的列返回,它是一个原始向量列表.