0

我创建了我的第一个函数,我为自己感到非常自豪,但我正在努力让它变得更好。它通过一个丰度表,识别每一行中最丰富的列,然后给我一个与另一个数据表相关的列的名称,这是通过使用 phyloseq 包创建的对象完成的。

find.top.phyla <- function(x){
  require(phyloseq)
  otu <- otu_table(x)
  tax <- tax_table(x)
  j<-apply(otu,1,which.max)
  k <- j[!duplicated(j)]
  l <- data.frame(tax[k,])
  m <- data.frame(otu[,k])
  colnames(m) <- l$Phylum
  n <- colnames(m)[apply(m,1,which.max)]
  m$TopPhyla <- n
  return(m)
}
find.top.phyla(top.pdy.phyl)

这给了我

     Proteobacteria    Actinobacteria    Bacteroidetes    TopPhyla
S1        45                25                10          Proteobacteria
S2        14                35                5           ActinoBacteria
S3        88                19                400         Bacteroidetes

为了使它更有用,我想准确地告诉它我想要哪个分类单元级别,并吐出另一个表,上面有分类法,数据框中有适当的丰度,并且为数据框中标识的每一行确定了最丰富的分类单元. 如上图所示。

find.top.taxa <- function(x,taxa){
  require(phyloseq)
  top.taxa <- tax_glom(x, taxa)
  otu <- otu_table(top.taxa)
  tax <- tax_table(top.taxa)
  j<-apply(otu,1,which.max)
  k <- j[!duplicated(j)]
  l <- data.frame(tax[k,])
  m <- data.frame(otu[,k])
  s <- as.name(taxa)      # This is Where the issue is occuring
  colnames(m) <- l$make.names(taxa)  # This is Where the issue is occuring
  n <- colnames(m)[apply(m,1,which.max)]
  m$make.names(taxa) <- n   # This is Where the issue is occuring
  return(m)

}

我已经确定了问题出现的地方。我已经尝试过“is.name”、“as.name”、“taxa”(它真的不喜欢)和其他一些迭代。本质上,我想将“taxa”参数转换为变量字符串,并使用与“taxa”参数相同的列来标识另一个表中的列。即:find.top.taxa(top.pdy, "Class")和/或find.top.taxa(top.pdy, "Genus")

4

0 回答 0