Snakemake со скриптом R, ошибка: объект snakemake не найден

#r #snakemake

Вопрос:

У меня возникли проблемы при попытке запустить правило змеиного змея, которое вызывает сценарий R. Соответствующее правило змеиного змея выглядит следующим образом:

 rule summarize_transcripts:
    input:
        lineages = expand("../final/{seq_run}/{exp}_transcript_lineages.csv", exp=EXP, seq_run=SEQ_RUN),
        salmon_dir = expand("../salmon_quant_results/{experiment_id}", experiment_id=EXP),
    output:
        species_counts = expand("../final/{seq_run}/{exp}_sp_counts.csv", exp=EXP, seq_run=SEQ_RUN),
        family_counts = expand("../final/{seq_run}/{exp}_family_counts.csv", exp=EXP, seq_run=SEQ_RUN)        
    shell:
        '''
        Rscript ./deseq2.R
        '''
 

Вот верхняя часть моего сценария R, который завершается ошибкой при вызове объекта S4:

 library('DESeq2')
library('tximport')

#Read in dataframe that contains the trinity ID's linked to lineage information
df <- read.csv(snakemake@input[["lineages"]], header=TRUE)
 

Библиотеки загружаются нормально, говорится в сообщении об ошибке:

 Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  object 'snakemake' not found
Calls: read.csv -> read.table
Execution halted
 

Я пытаюсь упорядочить свои зависимости в файле conda .yml, который выглядит следующим образом:

 name: test_env

channels:
  - conda-forge
  - bioconda
  - r
  - default

dependencies:
  - star =2.7.1a
  - trinity =2.12.0
  - samtools =1.12
  - salmon =1.4.0
  - snakemake
  - pandas
  - r=4.1.0
  - r-essentials
  - bioconductor-deseq2
  - bioconductor-tximport
 

Почему R не распознает входные данные snakemake, как описано в документах snakemake? Я запускаю snakemake версии 6.5.1.

Ответ №1:

В примерах используется script: , а не shell: изменяется на

 script:
  "./deseq2.R"
 

скорее, чем

 shell:
    '''
    Rscript ./deseq2.R
    '''
 

Похоже, что snakemake необходимо ввести код R в скрипт, чтобы определить snakemake переменную, и он не может сделать это с помощью произвольных команд оболочки. Это делается только в том случае, если файл сценария заканчивается на «.R».