#python #split #snakemake
#python #разделение #snakemake
Вопрос:
Смотрите ниже, я не понимаю, почему мои параметры par1 и par2 одинаковы, несмотря на функцию .split() .
Посмотрите этот автономный пример, который можно запустить.
Вам нужно будет выполнить «touch id1-one.input id2-two.input» в рабочем каталоге.
files=["id1-one", "id2-two"]
rule all:
input:
expand("{sample}.output",sample=files)
rule myrule:
params:
par1 = "{sample}",
par2 = "{sample}".split("-")
input:
i = "{sample}.input"
output:
o = "{sample}.output"
shell:
"./myprog -i ${input.i} -o {output.o} par1: {params.par1} par2: {params.par2}"
Результат выполнения:
$ snakemake -s small3.smk --cores 10 -n -p
Building DAG of jobs...
Job stats:
job count min threads max threads
------ ------- ------------- -------------
all 1 1 1
myrule 2 1 1
total 3 1 1
[Sat Dec 11 18:59:02 2021]
rule myrule:
input: id2-two.input
output: id2-two.output
jobid: 2
wildcards: sample=id2-two
resources: tmpdir=/var/folders/jb/b9y_67gx3v727w68k7mgrpdm0000gn/T
./myprog -i $id2-two.input -o id2-two.output par1: id2-two par2: id2-two
[Sat Dec 11 18:59:02 2021]
rule myrule:
input: id1-one.input
output: id1-one.output
jobid: 1
wildcards: sample=id1-one
resources: tmpdir=/var/folders/jb/b9y_67gx3v727w68k7mgrpdm0000gn/T
./myprog -i $id1-one.input -o id1-one.output par1: id1-one par2: id1-one
[Sat Dec 11 18:59:02 2021]
localrule all:
input: id1-one.output, id2-two.output
jobid: 0
resources: tmpdir=/var/folders/jb/b9y_67gx3v727w68k7mgrpdm0000gn/T
Job stats:
job count min threads max threads
------ ------- ------------- -------------
all 1 1 1
myrule 2 1 1
total 3 1 1
This was a dry-run (flag -n). The order of jobs does not reflect the order of execution.
Ответ №1:
Вы должны использовать функцию ввода внутри params
, чтобы получить то, что вы хотите:
rule myrule:
params:
params3 = lambda wildcards: wildcards.sample.split("-")
...
shell:
"par1: {params.par1} par2: {params.par2} par3: {params.par3} par3[0]: {params.par3[0]}"
Расширяется до, для id1-one
:
par1: id1-one par2: id1-one par3: id1 one par3[0]: id1