我正在尝试使用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脚本前面,没有成功。有什么想法吗?
答案 0 :(得分:0)
我的建议是使用automator来运行shell脚本。然后,您可以使用R Batch在bash脚本中运行R脚本。
#!/usr/bin/env bash
cd absolute/path/of/R/File/Directory
R CMD BATCH scriptfile outputfile