我创建了我的第一个函数,我为自己感到非常自豪,但我正在努力让它变得更好。它通过一个丰度表,识别每一行中最丰富的列,然后给我一个与另一个数据表相关的列的名称,这是通过使用 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")