是否可以使用readr中的write_csv()编写stdout?

Luk*_*ham 5 bash r readr

我正在使用bash管道数据,Rscript所以: cat random.csv | Rscript test.R arg >| delete.csv

我的目标是使用Rreadr来读取stdin和写stdout.我在这里找到了stdin答案.

test.R

#!/usr/bin/Rscript
suppressMessages(library(readr))

args  <- commandArgs(trailingOnly = TRUE)

df.in <- read_csv(file("stdin"))

write_csv(df.in, path = stdout())
Run Code Online (Sandbox Code Playgroud)

上面的代码在命令行中生成以下错误消息:

错误信息

Error in path.expand(path) : invalid 'path' argument
Calls: write_csv -> write_delim -> normalizePath -> path.expand
Execution halted
Run Code Online (Sandbox Code Playgroud)

我也试过write_csv(df.in, file("stdout"))write_csv(df.in, stdout())生成相同的错误消息.

为了重现性,这里是一个链接 random.csv

世界卫生组织对全球结核病报告的变量定义[43kb]

m0n*_*awk 11

有一个format_csv功能readr.使用此代替write_csv:

cat(format_csv(df.in))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@ m0nhawk - 这非常接近.错误消息不再出现.但是,当存在多行时,`delete.csv`将所有数据打印在一行上.如果你用"cat()"包装你的答案,那么结果就是钱.例如`cat(format_csv(df.in))`.更新,我会接受你的回答. (2认同)