运行 Bash 命令行中文件的 R 函数

Running an R function over files in a Bash command line

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

strandcode.txt如下所示,这是一个计算卡方检验的简单函数。

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

但是这给了我错误 错误:"strand{" 中出现意外的“{” 执行暂停

我也试过以下命令行(从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

两个 运行 都没有错误,也没有向我的输出文件输出任何内容。

如有任何建议,我们将不胜感激。谢谢!

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

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

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