是否可以使用 readr 中的 write_csv() 编写标准输出?
Is it possible to write stdout using write_csv() from readr?
我正在使用 bash
通过 Rscript
管道传输数据,如下所示:
cat random.csv | Rscript test.R arg >| delete.csv
我的目标是使用 R
包 readr
来读取标准输入和写入标准输出。我找到了 answer to stdin here.
test.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())
产生相同的错误信息。
为了可重复性,这里是 link 到 random.csv
Definition of variables, by WHO for the Global Tuberculosis Report [43kb]
readr
中有一个 format_csv
函数。使用这个代替 write_csv
:
cat(format_csv(df.in))
从标准输入读取:
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())
感谢:jimhester
您可以使用 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
使用来自 base R 的 write.table
和 write.csv
,您可以将文件名指定为 ""
以打印到 STDOUT:
file: either a character string naming a file or a connection open
for writing. ‘""’ 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
我正在使用 bash
通过 Rscript
管道传输数据,如下所示:
cat random.csv | Rscript test.R arg >| delete.csv
我的目标是使用 R
包 readr
来读取标准输入和写入标准输出。我找到了 answer to stdin here.
test.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())
产生相同的错误信息。
为了可重复性,这里是 link 到 random.csv
Definition of variables, by WHO for the Global Tuberculosis Report [43kb]
readr
中有一个 format_csv
函数。使用这个代替 write_csv
:
cat(format_csv(df.in))
从标准输入读取:
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())
感谢:jimhester
您可以使用 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
使用来自 base R 的 write.table
和 write.csv
,您可以将文件名指定为 ""
以打印到 STDOUT:
file: either a character string naming a file or a connection open
for writing. ‘""’ 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