将变量从bash转换为R



我需要使用外消旋体。这需要一个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,所以你必须检查如何一起拼图。

最新更新