使用wget选项将输出直接传递到R

3

我有一个wget_string和以下命令:

wget_string <- paste("wget --user=" , u_name , " --password=", p_word,     " ", my_urls,' -qO ', file_name,   sep="")
 system(wget_string)
 readLines(file_name)

这种方法是可行的,但是我需要使用readLines()将文件读入R中。我希望能够直接在R中运行该命令,而无需将其保存到硬盘上,然后再从硬盘中加载。

我希望通过从web直接将文件加载到R中来节省资源。由于使用了安全服务器,无法从一开始就使用readlines。有哪些选项可以实现这一点?


请注意,在命令行中放置密码存在安全问题 - 它们可以被系统上的任何其他人读取。最好将它们放在 .wgetrc 文件中(阅读 wget 帮助获取更多信息)。 - Spacedman
谢谢,感激不尽。我很担心那个问题。 - Yoda
2个回答

14

system函数有一个intern=TRUE参数。捕获它所执行命令的输出。使用wget正确的选项和强制参数将其打印到标准输出:

> wget_string="wget -qO- http://www.google.com"
> s = system(wget_string,intern=TRUE)

如果您返回的数据是CSV文件,则可以使用textConnection,将其提供给read.csv


5
如果您使用wget-O -选项,您可以将输出设置为标准输出(直接在屏幕上写入)。这样,您就可以直接从wget命令的输出中读取内容。
例如:
 wget -O - http: //www.address.com

将网页下载并直接打印到标准输出。因此,您可以直接阅读system(wget_string)的输出结果。
来自wget手册页面:

-O 文件 --output-document=文件 文档将不会被写入相应的文件中,而是都将被连接在一起并写入文件中。如果使用“-”作为文件名,则文档将被打印到标准输出,禁用链接转换。(使用 ./- 将其文字打印到一个名为“-”的文件中。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接