想复现一篇论文中的进化树图,论文中提供的数据是excel存储的,首先把进化树的内容复制到一个文本文件里
读取树文件
library(ggtree)
read.tree("data/20220725/tree01.nwk")
遇到报错
Error in nchar(tree) : invalid multibyte string, element 1
查了一下报错,有人提到可能是字符编码问题
使用readLines()函数读取的话可以 看到有一个字符是乱码
readLines("data/20220725/tree01.nwk")
对应着到进化树中去看发现其是用减号链接的字符,这样可能不行?
对应着把这个减号改成下划线就好了,如果确实想在图上体现这个减号,可以出图后再编辑
然后读取
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就没有这个问题