在R中,将字符向量作为连接中的对象传递意味着什么?
在R中,将字符向量作为连接中的对象传递意味着什么?,r,file,binaryfiles,R,File,Binaryfiles,rawConnection函数有一个声明第一个参数object,必须是: 字符或原始向量。连接的描述。输入 这是一个R原始向量对象,对于输出连接,名称为 为了连接 我的团队正在使用rawConnection函数将内存中的数据帧序列化为CSV文件,然后将其推送到API。我们只需创建CSV的原始表示形式,然后将其发送出去,而不是将CSV文件写入磁盘,然后将其读回以推送。这一切都很好,虽然它不是我们正在使用的代码,但下面显示了我所说的内容 # Create fake data fake_data &l
rawConnection
函数有一个声明第一个参数object
,必须是:
字符或原始向量。连接的描述。输入
这是一个R原始向量对象,对于输出连接,名称为
为了连接
我的团队正在使用rawConnection
函数将内存中的数据帧序列化为CSV文件,然后将其推送到API。我们只需创建CSV的原始表示形式,然后将其发送出去,而不是将CSV文件写入磁盘,然后将其读回以推送。这一切都很好,虽然它不是我们正在使用的代码,但下面显示了我所说的内容
# Create fake data
fake_data <- data.frame(a = c(1,2,3),
b = c(4,5,6),
c = c(7,8,9))
# Open a connection to a raw vector
write_rawcon <- rawConnection(object = raw(0),
open = "w")
# Write CSV file to the raw vector
write.csv(x = fake_data,file = write_rawcon,row.names = FALSE)
# Access binary representation of CSV
binary_csv <- rawConnectionValue(write_rawcon)
# Close raw connection
close(write_rawcon)
# Read binary back in
read_rawcon <- rawConnection(object = binary_csv,open = "r")
new_binary_csv <- readBin(con = read_rawcon,what = "raw",n = length(binary_csv))
# The binary read in matches the binary from the write connection
identical(x = binary_csv,y = new_binary_csv)
# We can convert the raw to character, and make a text connection back
# Hence, a CSV again
read.csv(file = textConnection(object = rawToChar(new_binary_csv)))
二进制到字符串
文件路径写入模式
文件路径读取模式
强制为字符的序列化对象
在困惑中,我一直在尝试其他一些事情。我发现的一件事是,如果您尝试打开与使用serialize
序列化的R对象的rawConnection
,并将其包装为.character,则错误消息会有细微的不同。如果serialize
没有用as.character
包装,那么代码可以正常工作,但我认为这是因为serialize
返回了一个原始向量。您是告诉序列化
显式返回还是不返回ASCII输出似乎也很重要,我对此也感到困惑
more_fake_data <- c(1,2,3,4)
rawConnection(object = as.character(serialize(object = more_fake_data,
connection = NULL,
ascii = TRUE)),
open = "r")
Error in rawConnection(object = as.character(serialize(object = more_fake_data, :
invalid 'description' argument
rawConnection(object = as.character(serialize(object = more_fake_data,
connection = NULL,
ascii = FALSE)),
open = "r")
Error in rawConnection(object = as.character(serialize(object = more_fake_data, :
invalid 'description' argument
rawConnection(object = as.character(serialize(object = more_fake_data,
connection = NULL)),
open = "r")
Error in rawConnection(object = as.character(serialize(object = more_fake_data, :
invalid 'raw' argument
如果您要给它一个现有连接的名称,那么首先应该如何创建连接?为什么要使用
rawConnection
来创建您已经拥有的连接?我确信我在这里误解了一些东西——我希望有人能提供一个工作示例来澄清问题。您引用了文档中的解释:“对于输入,这是一个R原始向量对象,对于输出连接,这是连接的名称。”因此,在读取模式下,它采用数据的原始向量;对于写入模式,它采用连接名称的字符向量。不过,我不确定是否有必要这样做,好像您可以使用textConnection
将CSV的字符向量保存为变量,例如write.CSV(mtcars,textConnection('x','w'))
,避免写入磁盘和序列化。我想这是混淆的一部分,因为“输出模式”(即写入模式)需要原始数据(0)
毫无困难,这不是一个字符向量。此外,如果您尝试使用rawConnection(object=“object”,open=“w”)
,您会得到相同的“invalid'raw”参数。此外,为清楚起见,我们使用的方法希望将二进制表示形式传递给函数,因此我们要这样做:另外:我已经编辑了我的问题,以便更清楚地说明这一点。看起来文档是错误的。这个似乎不可能将字符值传递给rawConnection
是的,尝试一下,有点奇怪。在编写模式中,引用的输入被用作描述,但据我所知,获取数据的唯一方法是使用rawConnectionValue
,这似乎……不正确。
rawConnection(object = paste(new_binary_csv,
collapse = ""),
open = "r")
Error in rawConnection(object = paste(new_binary_csv, collapse = ""), :
invalid 'raw' argument
rawConnection(object = "C:/valid/path/hello.bin",open = "w")
Error in rawConnection(object = "C:/valid/path/hello.bin", :
invalid 'raw' argument
rawConnection(object = "C:/valid/path/hello.bin",open = "r")
Error in rawConnection(object = "C:/valid/path/hello.bin", :
invalid 'raw' argument
more_fake_data <- c(1,2,3,4)
rawConnection(object = as.character(serialize(object = more_fake_data,
connection = NULL,
ascii = TRUE)),
open = "r")
Error in rawConnection(object = as.character(serialize(object = more_fake_data, :
invalid 'description' argument
rawConnection(object = as.character(serialize(object = more_fake_data,
connection = NULL,
ascii = FALSE)),
open = "r")
Error in rawConnection(object = as.character(serialize(object = more_fake_data, :
invalid 'description' argument
rawConnection(object = as.character(serialize(object = more_fake_data,
connection = NULL)),
open = "r")
Error in rawConnection(object = as.character(serialize(object = more_fake_data, :
invalid 'raw' argument
rawcon <- rawConnection(object = "myconnection",open = "w")
Error in rawConnection(object = "myconnection", open = "w") :
invalid 'raw' argument