使用子集数据在R中创建for循环

时间:2017-11-05 23:23:29

标签: r for-loop

我最近开始在R编程,我正在尝试计算数据集的斜率。这是我的代码:

slopes<- vector()
gdd.values <- length(unique(data.gdd$GDD))
for (i in 1:gdd.values){
  subset.data <- data.gdd[which(data.gdd$GDD==i),]
  volume <- apply(subset.data[,4,6],1,prod)
  species.richness <- apply(subset.data[,7:59],1,sum)
  slopes[i] <- lm(log(species.richness) ~ log(volume))$coefficients[2]
}

当我运行它时,“斜率”值仍为空。所有其他值都很好(没有其他空集)。如果你发现任何明显的错误,请告诉我。感谢

1 个答案:

答案 0 :(得分:0)

目前,您正在迭代唯一值的长度而不是唯一值本身。因此,在@RobJensen注释时,调整for循环向量和迭代。因此,为什么部分或全部返回值会导致丢失,因为 subset.data 可能由于过滤不精确而不包含任何行。

但是,考虑采用更简化的方法,使用经常未充分利用和忽略的by()子集数据集按需要的分组因子,并将返回的列表绑定到向量中:

coeff_list <- by(data.gdd, data.gdd$GDD, FUN=function(df) {
  volume <- apply(df[,4,6],1,prod)
  species.richness <- apply(df[,7:59],1,sum)
  lm(log(species.richness) ~ log(volume))$coefficients[2]
})

slopes <- do.call(c, coeff_list)