使用vegan包rarecurve函数报错:(subscript) logical subscript too long
问题原因及解决方法
报错原因
rarecurve(vegan包)要求输入的矩阵必须是行对应样本、列对应OTU/分类单元的格式,但phyloseq的otu_table默认设置通常是行对应OTU、列对应样本(可通过taxa_are_rows()验证)。直接将这种方向的otu_table传入rarecurve时,函数会因维度不匹配触发下标逻辑长度错误。
解决方法
方法1:转置otu_table后传入
先转置otu_table,确保样本为行、OTU为列,再传入rarecurve:
data("GlobalPatterns") # 转置otu_table,调整为样本行、OTU列的格式 otu_mat <- t(otu_table(GlobalPatterns)) # 调用rarecurve rare <- rarecurve(otu_mat, step=100, lwd=2, ylab="OTU", label=F)
方法2:确认并调整otu_table的方向
先检查当前otu_table的方向,再调整后转换为矩阵:
data("GlobalPatterns") # 查看otu_table的行类型(通常返回TRUE,即行是OTU) taxa_are_rows(otu_table(GlobalPatterns)) # 调整为样本行的格式并转换为矩阵 otu_mat <- as(otu_table(GlobalPatterns, taxa_are_rows=FALSE), "matrix") # 绘制稀释曲线 rare <- rarecurve(otu_mat, step=100, lwd=2, ylab="OTU", label=F)
额外说明
如果之前调用正常,可能是当时使用的otu_table已经是样本行的格式,或是旧版本vegan对输入格式的兼容性更强。当前版本严格要求输入矩阵的行对应样本,因此必须调整格式。
内容的提问来源于stack exchange,提问作者i.b
相关产品推荐
相关产品推荐

