2017-06-29 71 views
2

我正在使用snakemake開發一條管線。我試圖爲目錄中的每個文件創建符號鏈接到新的目標。我不知道提前有多少文件,所以我試圖使用動態輸出。snakemake動態輸出

rule source: 
     output: dynamic('{n}.txt') 
     run: 
      source_dir = config["windows"] 
      source = os.listdir(source_dir) 
      for w in source: 
       shell("ln -s %s/%s source/%s" % (source_dir, w, w)) 

這是錯誤我得到:

WorkflowError: 「目標規則可能不包含通配符請註明具體的文件或不帶有通配符的規則。」

這是什麼問題?

+0

我從來沒有嘗試'動態',但在文檔中給出的例子有不同的使用方式比你所做的:http://snakemake.readthedocs.io/en/stable/snakefiles/rules.html #動態文件。特別是,有一個駕駛'全部'規則,有動態的東西作爲輸入。你有這樣的規則嗎? – bli

回答

4

對於使用動態功能,您擁有的輸入是動態文件這樣得到的其他規則:

rule target : 
    input : dynamic('{n}.txt') 

rule source: 
    output: dynamic('{n}.txt') 
    run: 
    source_dir = config["windows"] 
    source = os.listdir(source_dir) 
    for w in source: 
     shell("ln -s %s/%s source/%s" % (source_dir, w, w)) 

像這樣Snakemake會知道什麼是有屬性的通配符。

提示當您使用通配符時,您必須定義它。這裏在目標規則的輸入中調用dynamic將定義通配符'{n}'。