在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