【问题标题】:Running an R function over files in a Bash command line [duplicate]在 Bash 命令行中对文件运行 R 函数 [重复]
【发布时间】:2016-10-14 09:35:52
【问题描述】:

我正在尝试在给定目录中的所有文件上迭代我用 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

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

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

【问题讨论】:

标签: r linux bash command-line rscript


【解决方案1】:

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2012-11-14
相关资源
最近更新 更多