从R运行linux命令

时间:2014-08-26 23:05:25

标签: linux r

我有一堆随机文件,我将在每个文件上运行LINUX-file命令。 Linux屏幕如下

m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard

只有当Linux说该文件是文本文件时,我才想运行一个遍历该文件的R脚本并查找所有列名。在上面的屏幕中,我想只在第一个文件上运行R脚本。我怎么能实现这个条件处理?

有什么方法可以从R运行Linux命令?如果我可以这样做,那么我可以分析Linux命令给出的输出,看它是否包含文本,然后我可以根据需要执行R脚本。

我很难实现这一目标并且感谢任何帮助

1 个答案:

答案 0 :(得分:6)

尝试system()

08/27 7:08 [nodakai@kaidev01] ~/R$ R -q
> system("ls /")
bin  boot  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64  libGL.so  libnss3.so  lost+found  media  mnt  opt  proc  root  run  sbin  selinux  sftp  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old
> x = system("ls", TRUE)
> x
[1] "a.csv"                       "abi.pdf"                    
[3] "b.csv"                       "image.jpeg"                 
[5] "x86_64-pc-linux-gnu-library"
> for (f in system("ls", TRUE)) { if (length(grep("ASCII", system(paste("file", f), TRUE)))) { print(f) }  }
[1] "a.csv"
[1] "b.csv"

通配

如果您确定所有文件都以" .csv"结尾是纯文本CSV文件,只需使用Sys.glob()

> list.files()
[1] "a.csv"                       "abi.pdf"                    
[3] "b.csv"                       "image.jpeg"                 
[5] "x86_64-pc-linux-gnu-library"
> Sys.glob("*.csv")
[1] "a.csv" "b.csv"