12

bash用来通过Rscript这样的管道传输数据: cat random.csv | Rscript test.R arg >| delete.csv

我的目标是使用该Rreadr来读取标准输入和写入标准输出。我在这里找到了标准输入的答案

测试.R

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

args  <- commandArgs(trailingOnly = TRUE)

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

write_csv(df.in, path = stdout())

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

错误信息

Error in path.expand(path) : invalid 'path' argument
Calls: write_csv -> write_delim -> normalizePath -> path.expand
Execution halted

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

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

WHO 为全球结核病报告定义的变量 [43kb]

4

4 回答 4

23

中有一个format_csv功能readr。用这个代替write_csv

cat(format_csv(df.in))
于 2016-03-01T12:26:00.437 回答
2

从标准输入读取:

df.in <- read_csv(paste(collapse = "\n", readLines(file("stdin"))))

写入标准输出:

writeLines(format_csv(tibble(a=c(1,2))), stdout())

#or
writeLines(format_csv(df.in), stdout())

向:吉姆赫斯特致敬

于 2017-08-10T13:32:06.040 回答
0

使用write.tablewrite.csv从基础 R,您可以指定""要打印到 STDOUT 的文件名:

file: either a character string naming a file or a connection open
      for writing.  ‘&quot;"’ indicates output to the console.

例子:

$ Rscript -e 'write.csv(head(mtcars),"",quote=F)'
,mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb
Mazda RX4,21,6,160,110,3.9,2.62,16.46,0,1,4,4
Mazda RX4 Wag,21,6,160,110,3.9,2.875,17.02,0,1,4,4
Datsun 710,22.8,4,108,93,3.85,2.32,18.61,1,1,4,1
Hornet 4 Drive,21.4,6,258,110,3.08,3.215,19.44,1,0,3,1
Hornet Sportabout,18.7,8,360,175,3.15,3.44,17.02,0,0,3,2
Valiant,18.1,6,225,105,2.76,3.46,20.22,1,0,3,1
于 2021-03-13T06:31:07.180 回答
-2

您可以使用write.table

write.table(x, file = "foo.csv", sep = ",", col.names = NA,
        qmethod = "double")

查看帮助页面:https ://stat.ethz.ch/R-manual/R-devel/library/utils/html/write.table.html

于 2018-03-16T15:08:25.573 回答