恰好這兩天有一個學徒也是遇到了同樣的報錯,沒有第一時間去修改版本,而是嘗試讀源代碼方式解決: 因為服務器網絡臨時出現了問題,但是項目比較急,就不得不本地跑單細胞擬時序分析的monocle2包 ,運行腳本如下: 到cds <- orderCells(cds)這一步的時候報錯了 if(class(projection) != 'matrix') -> error projection <- as.matrix(projection) 將問題復制粘貼到bing搜索框,看到了github上關于這個問題的討論,其中這個解答就是大家總結出來的解決方法: https://github.com/cole-trapnell-lab/monocle-release/issues/434#issuecomment-1159781524 我們按照上面提供的方法一步步操作 1.從這個網址上下載monocle https://www./packages/3.15/bioc/src/contrib/Archive/monocle/ 2.解壓之后得到一個monocle文件夾 3.打開這個文件夾R文件夾下面的order_cells.R腳本 打開腳本,將1620和1621行的代碼從 if(class(projection) != 'matrix') 修改為 projection <- as.matrix(projection) 保存腳本,在R studio 的Console的位置用.libPaths()查找出R包的安裝位置如下: .libPaths() 根據這個路徑找到library文件夾(如果是mac電腦,直接將以上文件路徑復制到聚焦搜索框就能快速定位到文件位置) 將改好的monocle文件拖進library文件夾后,在 R studio,中輸入以下命令來加載這個包 devtools::load_all("path to the location/monocle") 然后再次運行orderCells函數,問題就解決了!(這個回答是這么說的) 但是!!!當我滿心歡喜期待問題解決的時候,運行orderCells仍然出現同樣的報錯,問題依然存在! 于是我懷疑剛剛改過的包并沒有被成功加載,加載的,是之前新版本的monocle包,于是我重啟R studio ,重新來了一遍,發現到monocle加載不了,顯示沒有這個包,推測這是因為我修改后的monocle包雖然被我拖到library文件夾中了,但是并沒有被成功安裝,然后繼續查看剛剛github中的回答,發現有這么一條 按照這個方法install這個包,然后再load,仍然不成功 這時候出現了一個我之前一直不知道的R包的安裝方法,那就是 在monocle文件夾下新建一個Rproj文件,然后打開這個文件,右上方的install and restart按鈕,包就會被安裝上。 用這個方法安裝上monocle包之后,再load,成功了,再次運行orderCells,成功了! 到此,這個問題成功解決!!!!然而? 問題真的解決了嗎? 繼續運行腳本,在運行到BEAM函數運行的時候又出現了如下報錯: > BEAM_res <- BEAM(cds[expressed_genes[1:20],], branch_point = 1, cores = 1) Error in if (progenitor_method == "duplicate") { : the condition has length > 1 Called from: buildBranchCellDataSet(cds = cds, branch_states = branch_states, branch_point = branch_point, branch_labels = branch_labels, ...) 截圖如下: 然而在服務器上運行同樣的代碼,其實也出現了同樣的提示,但不是Error是warning,然后代碼仍然可以繼續運行下去,截圖如下: 仔細看github上關于這個問題的討論, 發現有人和我碰到了一樣的問題 https://github.com/cole-trapnell-lab/monocle-release/issues/434#issuecomment-1162077298 當然往后翻,是有人給出解決方法的,又是和order cells一樣,去修改源代碼 但到這里,我已經不想改了,暫時放棄在本地運行monocle 總結一下,這次debug,最初始的問題是解決了但是從整體來看又不算完全解決,或許最干脆的方法是降級R和/或R studio,不然不知道下次在哪個函數上又碰到報錯要去修改源代碼。 不過在這個過程中,我對R包的認識又上了一個新的臺階,以前只知道安裝它,加載它,除了這個包叫什么名字,有哪幾個常用函數之外,其他一概不了解。這是第一次深入R包內部看到它的源代碼,看到我們用一個函數實現的功能的背后是動輒幾千行代碼,由衷佩服,致敬所有R包開發人員! |
|