【问题标题】:Using data.table::fwrite() to write .txt files — is.list(x) is not TRUE使用 data.table::fwrite() 写入 .txt 文件 — is.list(x) 不是 TRUE
【发布时间】:2019-06-17 12:10:54
【问题描述】:

我试图用 data.table::fwrite() 替换基本 R 函数 write.table() 以加快编写速度,但该函数抱怨说 is.list(x) is not TRUE

我提供的 fwrite() 期望的输入有什么问题,但 write.table() 静默接受?

sample_txt <- c("Obligationenrecht\n4 Die Bankenkommission kann unter den Voraussetzungen von Absatz 2 die\nAnwendung der vom Bundesrat anerkannten Standards zur Rechnungslegung im\nBereich der Banken einschränken.\n9. Börsengesetz vom 24. März 199530\nArt. 16          Rechnungslegung\n1 Die Bestimmungen des Bankengesetzes vom 8. November 193431 über die\nRechnungslegung für Banken gelten sinngemäss auch für Effektenhändler.\n2 Der Bundesrat kann von den Bestimmungen nach Absatz 1 abweichen, wenn")

write.table(
  sample_txt,
  file = here::here("test.txt"),
  sep = "\t",
  row.names = FALSE,
  col.names = FALSE
)

data.table::fwrite(
  sample_txt,
  file = here::here("test.txt"),
  sep = ";",
  col.names = FALSE,
  row.names = FALSE
)
#> Error in data.table::fwrite(sample_txt, file = here::here("test.txt"), : is.list(x) is not TRUE

reprex package (v0.3.0) 于 2019 年 6 月 17 日创建

【问题讨论】:

  • 您没有表格数据。为什么不简单地使用 write()?无论如何,如果您坚持使用 fwrite(),请将您的数据包装在 data.table() 中。
  • 它适用于sample_txt &lt;- list(...)
  • @Roland 谢谢你的建议!我正在做一些基准测试,这就是为什么我想让这个特殊的解决方案发挥作用——write() 在这种情况下更快也更适合。

标签: r data.table


【解决方案1】:

感谢@s.brunel 和@Roland,这里有两个可行的解决方案:

sample_txt <- c("Obligationenrecht\n4 Die Bankenkommission kann unter den Voraussetzungen von Absatz 2 die\nAnwendung der vom Bundesrat anerkannten Standards zur Rechnungslegung im\nBereich der Banken einschränken.\n9. Börsengesetz vom 24. März 199530\nArt. 16          Rechnungslegung\n1 Die Bestimmungen des Bankengesetzes vom 8. November 193431 über die\nRechnungslegung für Banken gelten sinngemäss auch für Effektenhändler.\n2 Der Bundesrat kann von den Bestimmungen nach Absatz 1 abweichen, wenn")

# solution 1 
data.table::fwrite(
  x = data.table::data.table(sample_txt),
  file = here::here("test.txt"),
  sep = ";",
  col.names = FALSE,
  row.names = FALSE
)

# solution 2 

data.table::fwrite(
  x = list(sample_txt),
  file = here::here("test.txt"),
  sep = ";",
  col.names = FALSE,
  row.names = FALSE
)

reprex package (v0.3.0) 于 2019 年 6 月 17 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多