【发布时间】:2018-01-08 14:39:05
【问题描述】:
为了在 Python 和 R 之间快速交换数据,我编写了一个相当肮脏的解决方案,它可以工作。在 Linux 和 OSX 上。可能不是我现在必须让它在 Windows 中工作。
以下代码运行一个 python 脚本,该脚本构建一个原始向量,该向量可由 RApiSerialise 序列化为 R 对象。
COMMAND = "python"
PATH_TO_SCRIPT='/GetCassandraData.py'
QueryCassandra <- function(query){
allArgs = c(PATH_TO_SCRIPT, query)
output.connection <- rawConnection(raw(length = 0), "r+")
exec_wait(COMMAND, args = allArgs, std_out = output.connection)
output <- rawConnectionValue(output.connection)
close(output.connection)
final <- unserializeFromRaw(output)
return(final)
}
这在 OSX 和 linux 上按预期工作,但是,Windows 倾向于在 0x0a(换行)字节之前放置一个 0x0d(回车)字节,这使得 RApiSerialise 无法反序列化它。
我现在正试图通过套接字通信来解决这个问题,但我似乎无法找到将数据从 make.socket() 对象读取到原始向量的方法。
我试过了:
data <- read.socket(datasocket)
导致:
read.socket(datasocket) 中的错误: 在字符串中嵌入 nul:'X\n\0\0\0\002\0\003\004\002\0\002\003\0'
函数 read.socket() 尝试读取字符串并且不接受空字节。
有没有办法将套接字数据读取到 R 中的原始向量中?
【问题讨论】:
-
我已经通过使用 readBin() 找到了解决方案,当我完成我的代码后,我会在这里发布。