在Bash命令行

时间:2016-06-13 20:35:59

标签: r linux bash command-line rscript

我正在尝试迭代我在R(strandcode.txt)中编写的函数,而不是给定目录中的所有文件。

strandcode.txt如下所示,它是计算Chi Squared测试的一个简单函数。

strand <- function(file){
data <- as.data.frame(read.table(file))
colnames(data) <- c('chr', 'pos', 'fwd', 'bkwd')
data$chi <- ((.5 - (data$fwd / (data$fwd + data$bkwd)))^2)/.5
keep <- data[data$chi < .823, ]
return(keep)
}

strand{$i}

当我在Linux服务器上运行时,我正在使用Rscript并通过以下命令迭代目录中的所有文件。

for i in $( ls ); do Rscript strandcode.txt >> strandout.txt; done

然而,这给了我错误     错误:意外&#39; {&#39; in&#34; strand {&#34;     执行暂停

我还尝试了以下命令行(从strandcode.txt中取出最后一行)

for i in $( ls ); do Rscript strandcode.txt; Rscript strand{$i} >>     strandout.txt; done
for i in $( ls ); do Rscript strandcode.txt strand{$i} >> strandout.txt; done

两者都运行没有错误,并且没有向outfile输出任何内容。

任何建议都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

您必须使用仅匹配数据文件的模式,而不是扩展到目录中每个文件的$( ls ),包括strandcode.txt。假设您已将所有数据文件移动到名为data/的子目录中,您可以执行

for i in data/*; do Rscript -e "source('strandcode.txt'); print(strand('$i'))" >> strandout.txt; done

strandcode.txt删除最后一行后,如评论中所述,这是不正确的。只要文件名不包含单引号或其他有问题的字符,这就应该有效。