Bir kimlik tarafından gruplandırılmış büyük bir veri kümesini analiz etmek için plyr ve dplyr kullanırken, bazen işlevimde bir hata alıyorum. Neler olup bittiğini keşfetmek için tarayıcı() veya debugger() kullanabilirim, ancak bir sorun, sorunun ilk kimlikle mi, yoksa 100'le mi ilgili olduğunu bilmem. Hata ayıklayıcısını hatada durmama izin vermek için kullanabilirim, ancak yalnızca kimliğin hata ayıklamanın tek amacı için bir işlev girdisi olarak dahil edilmesinin yanı sıra, hangi kimliğin soruna neden olduğunu görmenin kolay bir yolu var mı? Aşağıdaki örnekle açıklarım. Bu aşağıdaki hatayı neden olur ve Çöpte dalmak zaman, sadece bakmak için ipucu zorunda TabiiPlyr veya dplyr'de hata ayıklama - hangi grubun göründüğünü görme
meanerr = function(y) {
m = mean(y)
stopifnot(!is.na(m))
return(m)
}
d = data.frame(id=c(1,1,1,1,2,2),y=c(1,2,3,4,5,NA))
dsumm = ddply(d,"id",summarise,mean=meanerr(y))
belki sadece bir olarak id dahil
> options(error=dump.frames)
> source('~/svn/pgm/test_debug_ddply.R')
Error: !is.na(m) is not TRUE
> debugger()
Message: Error: !is.na(m) is not TRUE
Available environments had calls:
1: source("~/svn/pgm/test_debug_ddply.R")
2: withVisible(eval(ei, envir))
3: eval(ei, envir)
4: eval(expr, envir, enclos)
5: test_debug_ddply.R#9: ddply(d, "id", summarise, mean = meanerr(y))
6: ldply(.data = pieces, .fun = .fun, ..., .progress = .progress, .inform = .inform, .parallel = .
7: llply(.data = .data, .fun = .fun, ..., .progress = .progress, .inform = .inform, .parallel = .p
8: loop_apply(n, do.ply)
9: (function (i)
{
piece <- pieces[[i]]
if (.inform) {
res <- try(.fun(piece, ...))
10: .fun(piece, ...)
11: eval(cols[[col]], .data, parent.frame())
12: eval(expr, envir, enclos)
13: meanerr(y)
14: test_debug_ddply.R#3: stopifnot(!is.na(m))
15: stop(sprintf(ngettext(length(r), "%s is not TRUE", "%s are not all TRUE"), ch), call. = FALSE,
neyse (aşağıya bakınız) Kolay hata ayıklama için her seferinde giriş yapmak sadece bir yoldur, ancak profesyonellerin ekstra değişkenlerin geçişini gerektirmeden daha zarif bir şey olup olmadığını merak ediyordum.
Andy