我需要使用外消旋体。这需要一个Rscript。
然而,我之前一直在运行这个bash脚本(它进入包含文件名ID列表的bestcoverage_E036文件,并检索与作业数组和行号相对应的ID(-它对bash脚本非常有效。
#!/bin/bash --login
#SBATCH --ntasks=1
#SBATCH --ntasks-per-node=1
#SBATCH -p htc
#SBATCH --mail-type=ALL # Mail events (NONE, BEGIN, END, FAIL, ALL)
#SBATCH --array=1-64
module load parallel
module load tool
EXOME_IDs_FILE=/home/bestcoverage_E036
INPUTFILE=/home/{}.bam
sed -n "${SLURM_ARRAY_TASK_ID}p" $EXOME_IDs_FILE | parallel -j 1 "tool $INPUTFILE"
然而,我现在需要使用R作为外显子,文档显示了它的一些用途:
data(exons.hg19)
my.counts <- getBamCounts(bed.frame = exons.hg19,
bam.files = my.bam,
include.chr = FALSE,
referenceFasta = fasta)
我想在这些例子中使用bash中的变量,比如说my.bam将是$INPUTFILE
这显然不起作用,但想法是这样的:
#!/bin/bash --login
#SBATCH --ntasks=1
#SBATCH --ntasks-per-node=1
#SBATCH -p htc
#SBATCH --mail-type=ALL # Mail events (NONE, BEGIN, END, FAIL, ALL)
#SBATCH --array=1-64
module load parallel
module load tool
EXOME_IDs_FILE=/home/bestcoverage_E036
INPUTFILE=/home/{}.bam
HG38=/home/hg38.fasta
INPUTBEDFILE=/home/inputbed.bed
sed -n "${SLURM_ARRAY_TASK_ID}p" $EXOME_IDs_FILE | parallel -j 1 "data($INPUTBEDFILE)
my.counts <- getBamCounts(bed.frame = $INPUTBEDFILE,
bam.files = $INPUTFILE,
include.chr = FALSE,
referenceFasta = $HG38)
有人知道如何在R代码中使用bash变量吗?
您需要一种将命令行参数传递给Rscript
的方法。有几个库可以帮助您实现这一点,还有一个非常基本的基本R
函数(commandArgs
(。
对于后者,您必须自己进行大量的解析和意义检查,而像getopt
这样的库可以帮助您完成许多常见任务。
话虽如此,这里有一个使用基本R
:的例子
cli.R
## base R very simple but a lot of manual parsing
base_args <- commandArgs(TRUE)
run_rnorm <- function(n, mean = NA, sd = NA) {
`%!%` <- function(x, y) if (is.na(as.numeric(x))) y else as.numeric(x)
args <- list(n = NULL,
mean = NULL,
sd = NULL)
args$n <- as.numeric(n)
args$mean <- mean %!% NULL
args$sd <- sd %!% NULL
do.call(rnorm, args)
}
stopifnot(`At least one parameter is needed` = length(base_args) > 0)
run_rnorm(base_args[1], base_args[2], base_args[3])
你可以从bash
这样称呼它:
Rscript cli.R 3
因此,您现在可以从类似的脚本中传递(bash(变量
Rscript cli.r $myvariable
在cli.R
中,您可以通过commandArgs(TRUE)[1]
访问它。我不知道parallel
,所以你必须检查如何一起拼图。