使用automator,只读取部分CSV

时间:2014-08-09 10:49:42

标签: r bash shell locale automator

我正在尝试使用automator运行shell脚本并读取CSV然后转换CSV并将结果写入文件。代码如下所示:

未格式化(如在Automator中)

Rscript -e "data<-read.table('/Users/User1/Desktop/test/basedata.csv',sep='\\\t',skip=5,header=TRUE,fileEncoding='UCS-2LE');data <- data[,c('Col1', 'Col2', 'Col3', 'Col4', 'Col5', 'Col6')];data <- data[data[,'Col3']=='Criterion A',];data <- data[order(data[,'Col4']),];write.csv(data,'/Users/User1/Desktop/test/Done.csv',row.names=FALSE);"

格式化

Rscript -e 
"data<-read.table(
   '/Users/User1/Desktop/test/basedata.csv',
   sep='\\\t',
   skip=5,
   header=TRUE,
   fileEncoding='UCS-2LE'
);
data <- data[,c('Col1', 'Col2', 'Col3', 'Col4', 'Col5', 'Col6')];
data <- data[data[,'Col3']=='Criterion A',];
data <- data[order(data[,'Col4']),];
write.csv(data,'/Users/User1/Desktop/test/Done.csv',row.names=FALSE);"

当我从命令行在R中用引号运行部件时,我得到一个大约3MB的文件。当我在Automator中运行代码时,脚本运行正常,但我只得到~50行。当我从上面的命令行运行相同的脚本时,我甚至得到一个错误说:

Error: unexpected string constant in "l3', 'Col4', 'Col5', 'Col6')];data <- data[data[,'Col3']=='Criterion A',];data<-data[order(data[,'Col4']),];write.csv(data,'"

提前致谢。

编辑 :显然它与编码有关。当我取出所有德国变形金刚(ü,ä,ö)时,问题就消失了。当我在write.csv中指定fileEncoding时,我得到错误(在Automator中没有异常)。当我在R中使用相同的代码时它工作正常。在automator和shell脚本之间似乎存在一些导致这种情况的层。

编辑2 :我开始认为它与语言环境有关。我试过了

LC_ALL=en_US.UTF-8;LC_CTYPE=UTF-8;LANG=en_US.utf8;

在shell脚本前面,没有成功。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我的建议是使用automator来运行shell脚本。然后,您可以使用R Batch在bash脚本中运行R脚本。

    #!/usr/bin/env bash
    cd absolute/path/of/R/File/Directory
    R CMD BATCH scriptfile outputfile