运行 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
中删除最后一行后,如评论中所述,这是不正确的。只要文件名不包含单引号或其他有问题的字符,这就应该有效。
我正在尝试对给定目录中的所有文件迭代我用 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
中删除最后一行后,如评论中所述,这是不正确的。只要文件名不包含单引号或其他有问题的字符,这就应该有效。