我有一个应该运行大约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的新手,所以没有什么东西可以跳出来。
答案 0 :(得分:0)
所以,这只是对你的问题的一种刺激,但如果没有看到基础数据集,它会有点困难。我使用的是Hadley的purrr
,tidyr
,plyr
和dplyr
个软件包。
如果不使用循环,它可以完成您尝试做的事情。
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)
这有用吗?