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

标签 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) 

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

 serialModel <- serialize(model, NULL)

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

 stringModel <- rawToChar(serialModel)

问题是:

Error in rawToChar(serialModel) : 
  embedded nul in string: 'X\n\0\0\0\002\0\002\v\0......

R 无法处理字符串中的\0。有谁知道如何绕过此限制?或者可能有一种完全不同的方法来实现这个目标?

提前致谢

最佳答案

你需要

stringModel <- as.character(serialModel)

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

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

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

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

Binary types can currently only be read as such, and they are returned as column of class "ODBC binary" which is a list of raw vectors.

关于database - 如何处理 R 中的二进制字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5950084/

相关文章:

java - 如何使用 jdbc 从数据库加载对象列表

python - 在python中提取不匹配的字符串

java - 在java中创建XML文件时传递字符串而不是节点

ruby - 反转对反转!在 Ruby 中比较回文

javascript - 禁用 Jasmine 期望,例如 xdescribe 或 xit?

sql - 任何 SQL 数据库 : When is it better to fetch a whole table instead of querying for particular rows?

r - 如何在 ggplot2 图中修改和添加额外的图例

r - 如何在 R 中的 ggplot2 中绘制混合效应模型估计值?

mysql - SQL 外键和主键

r - 如何在 R 中使用 msgbox