按 Michael I. Love 的《Statistical Modeling of High Dimensional Counts》Chapter 1 Quantification 教程修改的代碼。示例數據 oct4
能夠用tximeta
包順利讀取,但是換成自己的 Salmon 定量結果路徑就是會報 Error: lexical error: invalid char in json text.
的錯誤。
字符串轉義的鍋?
我的文件路徑 files
參數中除了.
和/
之外,特殊字符就只有下劃線_
了,然而示例數據oct4
中同樣是有下劃線的:/home/xxx/R/x86_64-pc-linux-gnu-library/4.0/oct4/extdata/quants/SRX2236945/quant.sf.gz
。打臉,不是。
cmd_info.json 是什麼鬼?
爲了不破壞原始數據進行 debug,複製了一份定量結果到個人項目根目錄,路徑變短以後,報錯信息中初現端倪:
Error: lexical error: invalid char in json text.
bug/SRR10435206/cmd_info.json
(right here) ------^
爲什麼好好的quant.sf.gz
被替換爲cmd_info.json
?是否是tximeta
產生的臨時文件?
親自到/home/xxx/R/x86_64-pc-linux-gnu-library/4.0/oct4/extdata/quants/SRX2236945/
下查看,結果發現這個目錄下不止一份quant.sf.gz
那麼簡單,還有cmd_info.json
等文件。
真相大白
我的 Salmon 定量結果是用 RNACocktail 產生的,其中run_rnacocktail.py quantify
需要指定兩個參數:--outdir
和--workdir
,--outdir
指定的目錄下只有<樣本名>/quant.sf
文件,而--outdir
指定的目錄下有更詳細的 Salmon 運行記錄,包含quan.sf.gz
,也包含cmd_info.json
。
之所以出現 Error: lexical error: invalid char in json text.
這樣的錯誤,是因爲我在tximeta
中指定的是--outdir
下的文件,tximeta
找不到cmd_info.json
,並不是tximeta
產生了一份臨時的 json 文件,在將quant.sf
路徑字符串複製進去的時候混入了什麼^M
等看不見的特殊字符導致R語言的 json 包解析出錯,也不是tximeta
只認quant.sf.gz
壓縮包而不認quant.sf
。構建coldata
這個變量的時候,字段$files
應該使用--workdir
所指向的文件夾來構建。
後話
但凡報錯信息打印得完整一點,但凡自己的項目路徑短一點,但凡tximeta
提示找不到cmd_info.json
而不是提示lexical error
,也不至於踩這個莫名其妙的坑,浪費青春浪費心情浪費頭髮。我是有多走運才連續穿透這塊瑞士奶酪模型上豎直對齊的三個孔洞啊。