如何在R中将列表保存为文件以便在Python中读取?

3

我在R中生成了一个列表。我想将其保存为外部文件,然后在Python中读取此文件。

我使用了:

write.table(list, file="~/test.txt")

但我收到了以下错误消息:

"Error in write.table: 'file' must be a character string or connection"

请问如何解决这个问题?

谢谢!

Error in write.table(list, file = "~/test.txt") :
 Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : 
  arguments imply differing number of rows: 9312, 628, 317, 27, 244, 894, 540, 280, 739, 866, 239, 2432, 969, 2033, 75, 509, 539, 321, 6637, 24, 116, 2006, 18, 2695, 16, 47, 32, 34, 28, 102, 44, 462, 84, 30, 73, 77, 29, 400, 60, 80, 31, 101, 680, 100, 58, 126, 112, 122, 155, 123, 167, 138, 149, 202, 246, 296, 240, 68, 350, 583, 46, 701, 467, 636, 654, 56, 418, 230, 64, 90, 74, 72, 67, 61, 55, 41, 40, 35, 25, 23, 22, 20, 19, 17

编辑:

这是我的列表结构(仅展示部分):

Original Answer翻译成"最初的回答"

$`5`
  [1] "OTU1159"             "OTU1158"             "UniRef90_A0A1B2YRW1"
  [4] "UniRef90_A0A1B2Z315" "UniRef90_A0A1B2Z316" "UniRef90_A0A1Z9FR83"
  [7] "UniRef90_A0A1Z9FRN0" "UniRef90_A0A1Z9FRT6" "UniRef90_A0A1Z9FSZ6"
 [10] "UniRef90_A0A1Z9FTY0" "UniRef90_A0A1Z9FU92" "UniRef90_A0A1Z9FVK9"
 [13] "UniRef90_A0A1Z9FVU0" "UniRef90_A0A1Z9FWD5" "UniRef90_A0A1Z9FYC5"
$`6`
  [1] "OTU4451"             "OTU4536"             "OTU4458"            
  [4] "OTU4430"             "OTU4435"             "OTU2156"            
  [7] "UniRef90_A0A081FUN4" "UniRef90_A0A081FUN8" "UniRef90_A0A0F5AQ41"
 [10] "UniRef90_A0A0R2PEV0" "UniRef90_A0A0R2U5F4" "UniRef90_A0A0R2UTD5"
 [13] "UniRef90_A0A0R2UUB4" "UniRef90_A0A0R2UW29" "UniRef90_A0A0R2UWJ2"
 [16] "UniRef90_A0A0R2UXE1" "UniRef90_A0A0R2UXE3" "UniRef90_A0A0S8BGF5"

最初的回答
需要帮忙吗?

list是一个类为"list"的对象吗?(这是一个糟糕的R对象命名,因为它已经是一个函数的名称。) - undefined
是的,它是一个类为"list"的对象。 - undefined
2个回答

4
这正是JSON的用途。在R中执行以下操作,其中l是您的列表:
library(jsonlite)
write_json(l, "test.json")

然后在Python中执行以下操作:
import json
with open("test.json") as f:
    l = json.load(f)

1
尝试以追加文本模式打开连接,open = "at",然后使用lapply函数的writeLines来一次写入一个向量。
fl <- file("~/test.txt", open = "at")
lapply(thelist, writeLines, con = fl)
close(fl)

上面的代码将垂直地按顺序写入向量。要逐行写入文本,请使用类似于以下内容的东西:
fl <- file("~/test.txt", open = "at")
lapply(thelist, function(x){
  x <- paste(x, collapse = " ")
  writeLines(x, con = fl, sep = "\n")
})
close(fl)

字段分隔符collapse字符可以是任何其他字符,例如制表符"\t"或逗号。


@Paillou 如果向量不是字符向量,它可能会失败。您需要知道正在编写的数据类型。 - undefined
我编辑了我的帖子,如果你想看一下我的数据结构。 - undefined
@Paillou 看一下修改,我觉得答案现在更完整了。 - undefined
是的,你已经做到了我想要的!非常感谢。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接