我正在尝试为以下数据创建一个循环:
Date
dpinterp
计算Date
包和功能:
library(akima)
library(dplyr)
dpinterp <- function(df=df) {
interp_df <- interp(x=df$x, y=df$y, z=df$x, duplicate="mean")
interp2xyz(interp_df, data.frame=TRUE)
}
数据创建:
df <- data.frame(
x=runif(4000,1,400),
y=runif(4000,10,40),
z=runif(4000,10,40),
Date=seq(as.Date("1910/1/1"), as.Date("1910/1/4"), "days"))
不幸的是我无法用上面的数据集重现我的错误,但是对于这个例子,我认为这不重要。我想知道的是,如果我尝试运行下面的循环并收到错误,我该如何跟踪发生了哪个Date
错误?
day <- unique(df$Date)
diagdf <- c()
for (i in day)
{
u <- df %>%
filter(Date %in% i) %>%
do(dpinterp(.)) %>%
ungroup()
diagdf <- rbind(diagdf, u)
diagdf$Date <- as.Date(i, origin="1970-01-01")
}
tbl_df(diagdf)
我意识到这样的事情是等价的:
df %>%
group_by(Date) %>%
do(dpinterp(.))
但是,我不知道如何追踪dplyr
管道中的错误。
所以基本的问题是,对于上下文的所有上述内容,我如何追踪循环中的错误以确定Date
并给我带来问题?
修改
以下是我收到的错误:
interp.old中的错误(x,y,z,xo = xo,yo = yo,ncp = 0,extrap = extrap,:所有数据共线调用:interp.old(x,y,z,xo = xo,yo = yo,ncp = 0,extrap = extrap, duplicate = duplicate,dupfun = dupfun)浏览[1]&gt;
没关系,有些数据似乎是共线的。但我的问题是哪些数据丢失了错误?以下是追溯的结果:
traceback()
18: stop("all data collinear")
17: interp.old(x, y, z, xo = xo, yo = yo, ncp = 0, extrap = extrap,
duplicate = duplicate, dupfun = dupfun)
16: interp(x = df$Pos, y = df$depth, z = df$value, duplicate = "mean") at #2
15: dpinterp(.)
14: eval(expr, envir, enclos)
13: eval(x$expr, data, x$env)
12: lazyeval::lazy_eval(args[[1]], data)
11: do_.data.frame(.data, .dots = lazyeval::lazy_dots(...))
10: do_(.data, .dots = lazyeval::lazy_dots(...))
9: do(., dpinterp(.))
8: function_list[[k]](value)
7: withVisible(function_list[[k]](value))
6: freduce(value, `_function_list`)
5: `_fseq`(`_lhs`)
4: eval(expr, envir, enclos)
3: eval(quote(`_fseq`(`_lhs`)), env, env)
2: withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
1: ktlpltdf %>% filter(variable %in% c(j)) %>% filter(Date == as.Date(i,
origin = "1970-01-01")) %>% mutate(Pos = ifelse(Station ==
"KLF1", 1, ifelse(Station == "KLF7", 3, 2))) %>% do(dpinterp(.)) at #5
答案 0 :(得分:1)
解决循环中出现的问题的一种经过验证的方法是在score > 80
循环的每次迭代期间打印出递增器。
您可以尝试类似
的内容{ "grades" : { $elemMatch: { score: { $gt:80, $lt:100 } } } }
通过添加多个具有略微不同消息的打印语句,您可以看到问题发生在循环体中的哪个位置。