首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Debug】如何顺利的重复别人的画图代码?一名Geek粉丝的Debug历程

【Debug】如何顺利的重复别人的画图代码?一名Geek粉丝的Debug历程

作者头像
Chris生命科学小站
发布2023-02-28 18:55:03
发布2023-02-28 18:55:03
4990
举报

第一个图很爽

【画图】SARS-CoV-2结合的宿主细胞受体ACE2在人组织中的表达情况
话说上次站长画了一个图,还公布了代码,我照搬过来很是爽了一下,相当于白piao了站长一回,不过用read.csv来读取GTEx实在是老牛小车,那可是3GB的文件呀,电脑自然是心跳加速,浑身滚烫,欲仙欲死,作为给站长的回报,我改成了用fread函数的版本,这样读取3GB文件的时间缩短到了87秒。
现在输入基因名,然后就出图:

第二个图艰难Debug

过了两天,站长画了下面的图:

【画图】与SARS-CoV-2病毒结合ACE2基因表达相关的那些事——如何批量展现相关性的细节?

于是忍不住给站长发红包要来代码,想继续爽一爽。可是万万没想到,居然报错了,大概意思就是只有字符串能够转换为symbol,这就奇怪了,同样的代码在站长的机器上跑就没有错误呀。
下图是站长机器上跑的结果,确实没有报错:
站长这里画图函数用的是ggstatsplot::ggscatterstats,上回的那个图也是用的这个包,这时候我突然发现一个小细节,站长画的小提琴图的中位数只有数字,而我画的图前面有个u=,如图:
于是我看了一下我的ggstatsplot包的版本,Ver 0.2.0,然后问了站长,原来他的是Ver 0.0.9,难道是包版本的原因导致出错了?
好在R的debug系统非常完善,输入rlang::last_error() 之后就能看上次报错错在哪里,这时候发现原来卡在 rlang::ensym(y) 这里,那么这个函数为什么会报错呢? 简单搜索一下就发现了,原来它还有个兄弟函数叫 rlang::sym( ),rlang::ensym( )的好处是不管字符串加不加引号,都可以转化为字符串,但是,非常坑的地方是rlang::ensym( )函数在转化字符串的时候,会先判断参数时候是函数,说到这里是不是有点晕了,直接看例子吧:
看到没有,如果rlang::ensym( ) 里面即使放一个向量也是不可以的,必须是字符串,而rlang :: sym ( ) 就不会。那么推测原因,ggstatsplot包之前的版本用的是 rlang :: sym ( ) 函数,而新版本的时候作者脑子抽风改成了 rlang::ensym ( )。
那么问题找到了,该怎么办呢?难道我们要重新再换一个包吗?先不急,我们先看看 ggstatsplot::ggscatterstats 这个函数是不是这样写的,验证一下我们的猜想:
如上图所示,果然是这个函数惹的祸。那接下来怎么办呢?其实非常简单,把这个函数复制出来,放到一个新的R Script里面,然后我们保存为patch.r ,然后把这两个函数修改为rlang::sym( )即可。然后运行一下这个函数,再到原来的代码里把《ggstatsplot::》去掉即可,这样修改过后的函数覆盖了原来包里的函数,就不会报错了,如图所示:
然后再运行一下,一切就正常了,顺利得到了batch.pdf 这个文件,打开如下图,哈哈哈哈。
头一回帮站长debug,就碰到个这么深的bug,真心不容易,南方的冬天阴冷,敲键盘的手都要冻出冻疮了,现在的我是这样敲键盘的:

ps:喜欢这款键盘的请留言

素材:

1、fread函数版本代码

2、patch.r的代码

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Chris生命科学小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一个图很爽
    • 【画图】SARS-CoV-2结合的宿主细胞受体ACE2在人组织中的表达情况
    • 话说上次站长画了一个图,还公布了代码,我照搬过来很是爽了一下,相当于白piao了站长一回,不过用read.csv来读取GTEx实在是老牛小车,那可是3GB的文件呀,电脑自然是心跳加速,浑身滚烫,欲仙欲死,作为给站长的回报,我改成了用fread函数的版本,这样读取3GB文件的时间缩短到了87秒。
    • 现在输入基因名,然后就出图:
  • 第二个图艰难Debug
    • 过了两天,站长画了下面的图:
    • 于是忍不住给站长发红包要来代码,想继续爽一爽。可是万万没想到,居然报错了,大概意思就是只有字符串能够转换为symbol,这就奇怪了,同样的代码在站长的机器上跑就没有错误呀。
    • 下图是站长机器上跑的结果,确实没有报错:
    • 站长这里画图函数用的是ggstatsplot::ggscatterstats,上回的那个图也是用的这个包,这时候我突然发现一个小细节,站长画的小提琴图的中位数只有数字,而我画的图前面有个u=,如图:
    • 于是我看了一下我的ggstatsplot包的版本,Ver 0.2.0,然后问了站长,原来他的是Ver 0.0.9,难道是包版本的原因导致出错了?
    • 好在R的debug系统非常完善,输入rlang::last_error() 之后就能看上次报错错在哪里,这时候发现原来卡在 rlang::ensym(y) 这里,那么这个函数为什么会报错呢? 简单搜索一下就发现了,原来它还有个兄弟函数叫 rlang::sym( ),rlang::ensym( )的好处是不管字符串加不加引号,都可以转化为字符串,但是,非常坑的地方是rlang::ensym( )函数在转化字符串的时候,会先判断参数时候是函数,说到这里是不是有点晕了,直接看例子吧:
    • 看到没有,如果rlang::ensym( ) 里面即使放一个向量也是不可以的,必须是字符串,而rlang :: sym ( ) 就不会。那么推测原因,ggstatsplot包之前的版本用的是 rlang :: sym ( ) 函数,而新版本的时候作者脑子抽风改成了 rlang::ensym ( )。
    • 那么问题找到了,该怎么办呢?难道我们要重新再换一个包吗?先不急,我们先看看 ggstatsplot::ggscatterstats 这个函数是不是这样写的,验证一下我们的猜想:
    • 如上图所示,果然是这个函数惹的祸。那接下来怎么办呢?其实非常简单,把这个函数复制出来,放到一个新的R Script里面,然后我们保存为patch.r ,然后把这两个函数修改为rlang::sym( )即可。然后运行一下这个函数,再到原来的代码里把《ggstatsplot::》去掉即可,这样修改过后的函数覆盖了原来包里的函数,就不会报错了,如图所示:
    • 然后再运行一下,一切就正常了,顺利得到了batch.pdf 这个文件,打开如下图,哈哈哈哈。
    • 头一回帮站长debug,就碰到个这么深的bug,真心不容易,南方的冬天阴冷,敲键盘的手都要冻出冻疮了,现在的我是这样敲键盘的:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档