R中system()和system2()之间的区别?捕获变量

时间:2018-02-04 07:25:34

标签: r system stdout filenames ls

在R中,我想列出目录中的文件,并捕获输出,但是从R:system()和system2()有两次调用系统。我很好奇这些差异是什么,如果有的话,更重要的是如何使用它们。我找到了一些页面,包括herehere,但我想在这里提供一些示例,以及使用system2()遇到的错误,包括:

  

sh:1:ls / home:not found

1 个答案:

答案 0 :(得分:3)

在研究之前,我的第一次尝试都在system()完成,因为我不知道system2()。我决定在system2()中重做我的方法以实现可移植性(我正在Linux系统上工作)。这让我发现了一些差异。

首先,列出文件的system()解决方案并将输出保存在变量中:

gseaDirectory<-"/home"
filenames<-system(paste("ls", gseaDirectory, sep=" "), intern=T)

这将一个字符串“/ home”存储到变量gseaDirectory中,这是我的主目录所在的位置。然后,我能够将命令ls,空格sep=" "和我的目录变量gseaDirectory粘贴到linux命令中,以列出所选目录中的所有文件:

ls /home

然后使用添加的system()参数intern=T将文件列表保存在变量“filenames”中。

这在system2()中不起作用,只返回错误:

  

sh:1:ls / home:not found

我们的相同方法稍有改动,等效system2()命令为:

gseaDirectory<-"/home"
filenames<-system2('ls',  paste(gseaDirectory, sep=" "), stdout = TRUE)

system2中的第一项是命令,然后是目标文件,后跟stdout=T告诉R我们要将输出存储到变量中,否则我们的命令结果将被打印而不是保存。

希望这有助于某人!