使用R语言ggtree读取进化树时的报错和解决办法

想复现一篇论文中的进化树图,论文中提供的数据是excel存储的,首先把进化树的内容复制到一个文本文件里

读取树文件

library(ggtree)
read.tree("data/20220725/tree01.nwk")

遇到报错

Error in nchar(tree) : invalid multibyte string, element 1

查了一下报错,有人提到可能是字符编码问题

https://community.rstudio.com/t/problem-importing-csv-file-in-r-error-in-make-names-x-invalid-multibyte-string-1/72802/2

使用readLines()函数读取的话可以 看到有一个字符是乱码

readLines("data/20220725/tree01.nwk")
image.png

对应着到进化树中去看发现其是用减号链接的字符,这样可能不行?

image.png

对应着把这个减号改成下划线就好了,如果确实想在图上体现这个减号,可以出图后再编辑

然后读取

read.tree("data/20220725/tree01.nwk")

又遇到报错

Error in FUN(X[[i]], ...) : 
  numbers of left and right parentheses in Newick string not equal

报错的意思就是进化树里的半括号数不匹配

搜索找到 参考

https://github.com/YuLab-SMU/ggtree/issues/432

有人说可能是进化树的文本标签 里有分号,我搜了一下我的没有

统计一下半括号的数量

readLines("data/20220725/Figure3b_1.txt") %>% 
  str_count("\\(")

readLines("data/20220725/Figure3b_1.txt") %>% 
  str_count("\\)")

一个13 一个14 确实不匹配

暂时想不到如何用代码去找是哪个括号多了,只能一个一个看了,还好进化树文件不多

把枝长信息去掉

readLines("data/20220725/Figure3b_1.txt") %>% 
  str_replace_all(":0.[0-9]+","")

把结果

((AbarCN65538_AB,(((Asat_Ogle_ACD_A,Sanfensan_ACD_A),(AlonCN58139_Al,AlonCN58138_Al)),((((AinsINS_4_CD_D,AinsCN108634_CD_D),AmarCN57945_CD_D),AmurCN21989_CD_D),(AagaCN25869_AB,(AcanCN23017_Ac,AdamCN19457_Ad)))))),(AnudCN58062_As,AstrCN88610_As),AwieCN90217_As);

放到rstudio写代码的地方,遇到逗号就换行,就能够找到多的那个右括号

但实际应该是少了一个左括号,在文件的最左边添加上就可以了

可能是在将树文件复制到excel的时候少选了一个左边的括号?

使用ggtree作图的时候

ggtree(tree01,layout = "daylight")+
  geom_tiplab()

使用daylight这个布局一直报错

Error: C stack usage 15924720 is too close to the limit

我现在用的R是4.0.3
换成4.1版本的R就没有这个问题

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容