分享

解决monocle中orderCells报错的一波三折

 健明 2022-09-21 发表于广东

我的很多单细胞教程是三五年前写的了,虽然降维聚类分群的主体思路没有变化,但是很多包用法因为作者对包的更新导致我的教程失效了。讨论最多的就是拟时序分析也转录因子分析,后来看到了群里的大家讨论的结果是:如果是monocle(2.24.1版本)拟时序分析时遇到报错,改用monocle(2.22.0),解决报错。SCENIC(1.1.2)改用SCENIC(1.3.1)解决报错

恰好这两天有一个学徒也是遇到了同样的报错,没有第一时间去修改版本,而是尝试读源代码方式解决:

因为服务器网络临时出现了问题,但是项目比较急,就不得不本地跑单细胞拟时序分析的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

/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)

修改为

projection <- as.matrix(projection)

保存脚本,在R studio 的Console的位置用.libPaths()查找出R包的安装位置如下:

.libPaths()
[1] "/Library/Frameworks/R.framework/Versions/4.2/Resources/library"

根据这个路径找到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包开发人员!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多