I eine Schleife für einige Daten zu schaffen versuche, dass:einen Fehler in einer Schleife der Spur
- alle Daten für eine bestimmte Funktion
Date
- verwendet eine Interpolation nimmt
dpinterp
Interpolation zu berechnen innerhalb dieserDate
- Die Daten für jedes Datum grafisch darstellen und als Datei ausgeben. Ich bin mit diesem Schritt einverstanden und werde ihn daher hier nicht berücksichtigen. Ich erwähne es nur um zu veranschaulichen, warum ich in diesem Fall eine Schleife verwende.
Pakete und Funktion:
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)
}
Datenerstellung:
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"))
Leider bin ich nicht in der Lage meine Fehler mit den oben genannten Datensatzes zu reproduzieren, aber für dieses Beispiel glaube ich nicht es ist wichtig. Was ich gerne wissen würde ist, wenn ich versuche, die Schleife unten zu laufen und ich einen Fehler erhalte, wie kann ich verfolgen, welcher Date
dieser Fehler auftrat?
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)
Ich weiß, dass so etwas wie dies entspricht:
df %>%
group_by(Date) %>%
do(dpinterp(.))
Aber ich weiß nicht, wie Fehler in einem dplyr
Rohr Zurückverfolgungs.
Also die grundlegenden Fragen ist, mit all dem oben für den Kontext, ist, wie traceback Fehler innerhalb einer Schleife, um herauszufinden, was Date
und mir Probleme?
bearbeiten
Hier ist der Fehler I erhalten:
Fehler in interp.old (x, y, z, xo = xo, yo = yo, ncp = 0, = extrap extrap,: alle Daten kollinear Abgerufen von: interp.old (x, y, z, xo = xo, yo = yo, ncp = 0, extrap = extrap, duplicate = duplicate, dupfun = dupfun) Durchsuchen [1] >
Das ist in Ordnung, einige der Daten scheinen kollinear zu sein. Aber mein Problem ist, welche Daten den Fehler werfen? Hier sind die Ergebnisse einer Traceback:
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
Was ist der Fehler? Sie können auch über dieses Problem nachdenken, indem Sie eine anwendungsspezifische Familienfunktion verwenden. Im Allgemeinen wollen Sie 'for' Schleifen und' rbind' die Ergebnisse nicht verwenden. – Vedda
Ich würde ein oder zwei 'print (i," Nummer 1 ")' und 'print (i," Nummer 2 ")' type-Anweisungen einwerfen. – lmo
@lmo Können Sie ein wenig ausarbeiten? – boshek