对于早期的循环结束 - 为什么?

时间:2015-10-21 16:45:24

标签: r

我有一个应该运行大约300,000次的循环,但是当我将数据绑定到数据框时它结束于55并且我不知道发生了什么。

有问题的循环是:

TrendlineMeta <- data.frame("FutureRecord" = character(), "System" = numeric(), "Intercepts" = numeric(), "Slopes" = numeric(), stringsAsFactors = FALSE)

for (i in unique(TrendingData$FutureRecord)){
  FilteredList <- TrendingData[TrendingData$FutureRecord == i,]

  Regressed <- lm(FilteredList$Value ~ FilteredList$Time)#, na.action = na.omit)

  newrow <- c("FutureRecord"=j, "System"=max(as.character(FilteredList$System)), "Intercepts"=summary(Regressed)$coefficients[1,1], "Slopes"=summary(Regressed)$coefficients[2,1])
  TrendlineMeta <- rbind(TrendlineMeta, data.frame(as.list(newrow), stringsAsFactors = FALSE))
}

并在55次尝试后结束。

然而,这个循环:

TrendlineMeta <- data.frame("FutureRecord" = character(), "System" = numeric(), "Intercepts" = numeric(), "Slopes" = numeric(), stringsAsFactors = FALSE)

for (i in unique(TrendingData$FutureRecord)){
  FilteredList <- TrendingData[TrendingData$FutureRecord == i,]

  Regressed <- lm(FilteredList$Value ~ FilteredList$Time)#, na.action = na.omit)

  #newrow <- c("FutureRecord"=j, "System"=max(as.character(FilteredList$System)), "Intercepts"=summary(Regressed)$coefficients[1,1], "Slopes"=summary(Regressed)$coefficients[2,1])
  #TrendlineMeta <- rbind(TrendlineMeta, data.frame(as.list(newrow), stringsAsFactors = FALSE))
}

完成。

我做错了怎么办?我是R的新手,所以没有什么东西可以跳出来。

1 个答案:

答案 0 :(得分:0)

所以,这只是对你的问题的一种刺激,但如果没有看到基础数据集,它会有点困难。我使用的是Hadley的purrrtidyrplyrdplyr个软件包。

如果不使用循环,它可以完成您尝试做的事情。

partA <- TrendingData %>%
  split(.$FutureRecord) %>%
  map(~ lm(Value ~ Time, data = .)) %>%
  map(summary) %>%
  map("coefficients") %>% 
  map(data.frame) %>% 
  map(~ select(.x, Estimate) %>%
        mutate(coef = row.names(.))) %>%
  ldply(rbind) %>%
  rename(FutureRecord = .id) %>%
  spread(coef, Estimate)

从这里开始,

partB <- TrendingData %>%
  select(FutureRecord, System) %>%
  group_by(FutureRecord)  %>%
  filter(System == max(System)) %>%
  ungroup

然后,

left_join(partA, partB)

这有用吗?