我有一个来自不同门和类的样本数据集(mags(,我想对其进行排序。首先,我创建了一个空列表,其中包含与不同门一样多的空数据帧。原则上,这是可行的,但人们已经可以从输出中看到问题。
Phylum <- c("a", "b", "c", "d")
Mags <- data.frame(Phylum=c("a", "a", "b", "c", "d", "d", "d"),
Class=c("A1", "A2", "B1", "C1", "D1", "D2", "D3"))
erg <- list()
for (i in length(Phylum)) {
erg[[i]] <- data.frame(i)
}
names(erg) <- Phylum
之后,我想对样品进行分类。哪个门包含哪些纲。类应该被写入数据框架中,而每个门在列表中都有自己的数据框架。
for (i in length(Phylum)){
erg[[i]] <- data.frame(unique(Mags$Class[Mags$Phylum == Phylum[i]]))
}
在输出中,它只适用于列表的最后一个元素。但我不明白为什么。
为了确保函数在原则上满足我的要求,我在没有for循环的情况下进行了尝试。
erg[[1]] <- data.frame(unique(Mags$Class[Mags$Phylum == Phylum[1]]))
erg[[2]] <- data.frame(unique(Mags$Class[Mags$Phylum == Phylum[2]]))
erg[[3]] <- data.frame(unique(Mags$Class[Mags$Phylum == Phylum[3]]))
erg[[4]] <- data.frame(unique(Mags$Class[Mags$Phylum == Phylum[4]]))
提前感谢您的帮助。
您应该用seq_along(Phylum)
替换length(Phylum)
。
for (i in seq_along(Phylum)){ # or 1:length(Phylum)
erg[[i]] <- data.frame(unique(Mags$Class[Mags$Phylum == Phylum[i]]))
}
length(Phylum)
等于4,但需要1到4。