恰好这两天有一个学徒也是遇到了同样的报错,没有第一时间去修改版本,而是尝试读源代码方式解决: 因为服务器网络临时出现了问题,但是项目比较急,就不得不本地跑单细胞拟时序分析的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包开发人员! |
|