R:用于仅对最后一个列表元素执行的循环



我有一个来自不同门和类的样本数据集(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。

最新更新