0

我有一个 phyloseq 对象ps,并且从这个数据集中,我试图使用R 包的bf_ratiobtools函数获取每个样本的拟杆菌门/硬壁菌门比率。

排名名称不是 Domain、Phylum 等:

rank_names(ps)
#[1] "Rank1" "Rank2" "Rank3" "Rank4" "Rank5" "Rank6" "Rank7"

作为参考,otu_table 和 tax_table 的行名如下:

rownames(ps@tax_table@.Data)
#   [1] "48baf5645056b45c97f6d87e2410ce16" "893d3f1d3aafc75e429daf9b9c360f28"
#   [3] "9275ca75b422e9a0c8beacd116f27e1c" "3007343469a726ab61a8c32e54805705"
#   [5] "3cdce58c1ade29df0fe33c1e453deebf" "d8bee39f679a042cdb5808866afdee88"

等等。

我必须首先将 Rank2 重命名为 Phylum:

ps1 <- ps %>%
  rename_tax_table(Phylum = Rank2)
bf_ratio(ps1)

但我收到以下错误:

#Error in h(simpleError(msg, call)) : error in evaluating the argument 'object' in selecting a method for function 'otu_table': length of 'dimnames' [1] not equal to array extent
#10. h(simpleError(msg, call))
#9. .handleSimpleError(function (cond) .Internal(C_tryCatchHelper(addr, 1L, cond)), "length of 'dimnames' [1] not equal to array extent", base::quote(dimnames(x) <- dn))
#8. `rownames<-`(`*tmp*`, value = c("sp1", "sp0"))
#7. `rownames<-`(`*tmp*`, value = c("sp1", "sp0"))
#6. .local(object)
#5. tax_table(newMA)
#4. tax_table(newMA)
#3. subset_taxa(phyla_rel, Phylum == "Bacteroidetes")
#2. otu_table(subset_taxa(phyla_rel, Phylum == "Bacteroidetes"))
#1. bf_ratio(ps1)

我已经尝试过rownames(ps@tax_table@.Data)< make.names(names(ps@tax_table@.Data))rownames(ps@otu_table@.Data)<-make.names(names(ps@otu_table@.Data))但收到以下错误:

#Error in validObject(.Object) : invalid class “phyloseq” object: 
# Component taxa/OTU names do not match.
# Taxa indices are critical to analysis.
# Try taxa_names()

我该如何解决这个问题?

4

0 回答 0