一种方式做到这一点的类UNIX系统就会打开一个管道被重定向stdout
和stderr
到FIFO的过程:
# Setup
system('mkfifo output.fifo')
p_out <- fifo('output.fifo', 'r')
p_in <- pipe('pdflatex &> output.fifo', 'w')
# See what TeX said on startup
readLines(p_out)
[1] "This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010)"
readLines(p_out)
character(0) # TeX has nothing more to say
# Tell TeX to do something
writeLines('\\documentclass{article}', p_in)
flush(p_in)
# See what it said in response
readLines(p_out)
[1] "**entering extended mode"
[2] "LaTeX2e <2009/09/24>"
[3] "Babel <v3.8l> and hyphenation patterns for english, dumylang, nohyphenation, ba"
[4] "sque, danish, dutch, finnish, french, german, ngerman, swissgerman, hungarian, "
[5] "italian, bokmal, nynorsk, polish, portuguese, spanish, swedish, loaded."
[6] ""
不幸的是,Windows不支持fifo
。
这是一个与基地的平台兼容性问题?我应该在那里提交一个错误/问题? 此外,文件选项在技术上是一个解决方案,但实际上这是为了管道大量的SQL结果以避免错误的ODBC驱动程序,因此写入磁盘并重新读入会很慢。 – mjbommar 2011-03-18 18:19:12
我在Linux上试过,如果R支持它的话,它会有它。没有必要提交错误报告,除非您可以编写代码或支付某人的费用--R Core的手已满。最后,我个人倾向于通过......编写直接的数据库访问块来避免错误的ODBC驱动程序。在那里,通过一些GSoC指导,为彭博,Lim,OneTick以及PostgreSQL等后端做好了准备。你的后端是什么? – 2011-03-18 18:29:31
@mjbommar,我还没有找到一种方法来做你所描述的,我花了几个小时尝试。但是,如果您只是试图在不使用ODBC驱动程序的情况下将SQL数据库结果转换为R,则可能不需要双向交互。尝试使用system()连接它并将查询作为输入提供。我这样做是为了访问我所有的数据库(这需要RMySQL无法做到的SSH隧道)。 – Noah 2011-03-18 19:25:48