geçerlidir. Sorun, FUN'un "x" in ne olduğunu bilmediğinden, apply(data,1,FUN(parameter=1))
Pas argümanlar aracılığıyla bu kukla-gibi bir işleve sahip
çalışmaz. Geçerli satır/sütun olarak "x" ile FUN çağrısına başvurmanın bir yolu var mı? `
geçerlidir. Sorun, FUN'un "x" in ne olduğunu bilmediğinden, apply(data,1,FUN(parameter=1))
Pas argümanlar aracılığıyla bu kukla-gibi bir işleve sahip
çalışmaz. Geçerli satır/sütun olarak "x" ile FUN çağrısına başvurmanın bir yolu var mı? `
Sen apply(data,1,FUN,parameter=1)
istiyorum. işlev tanımında ...
Not:
> args(apply)
function (X, MARGIN, FUN, ...)
NULL
ve belgelerde karşılık gelen bir giriş:
...: ‘FUN’ isteğe bağlı argümanlar.
Sen böylece EĞLENCE "x", ne olduğunu bilecek apply
için çağrı içinde isimsiz işlev yapabilir:
apply(data, 1, function(x) FUN(x, parameter = 1))
bu yöntemi kullanmak altındaki örnekler için ?apply
bakınız.
İşte ...
nesne ve *apply
kullanarak argümanları geçen pratik bir örnek. Bu kaygan ve bu kullanımı açıklamak için kolay bir örnek gibi görünüyordu. Unutulmaması gereken önemli bir nokta, bir argümanı ...
olarak tanımladığınızda, bu işlevin tüm çağrısının adlandırılmış argümanlara sahip olması gerekir. (böylece R, nereye koymaya çalıştığını anlıyor). Mesela ben times <- fperform(longfunction, 10, noise = 5000)
denilen olabilirdi ama ...
Benim kişisel tarzı geçirilir bir ...
Emin olmak için kullanılırsa argümanlar isim niteliğinde çünkü noise =
kapalı bırakarak bana bir hata verirdi.
Sen argüman noise
fperform(FUN = longfunction, ntimes = 10, noise = 5000)
çağrısına tanımlanan ediliyor ama diff <- rbind(c(x, runtime(FUN, ...)))
için çağrı ile başka 2 seviyeleri için kullanılmıyor ve sonuçta fun <- FUN(...)
# Made this to take up time
longfunction <- function(noise = 2500, ...) {
lapply(seq(noise), function(x) {
z <- noise * runif(x)
})
}
# Takes a function and clocks the runtime
runtime <- function(FUN, display = TRUE, ...) {
before <- Sys.time()
fun <- FUN(...)
after <- Sys.time()
if (isTRUE(display)) {
print(after-before)
}
else {
after-before
}
}
# Vectorizes runtime() to allow for multiple tests
fperform <- function(FUN, ntimes = 10, ...) {
out <- sapply(seq(ntimes), function(x) {
diff <- rbind(c(x, runtime(FUN, ...)))
})
}
times <- fperform(FUN = longfunction, ntimes = 10, noise = 5000)
avgtime <- mean(times[2,])
print(paste("Average Time difference of ", avgtime, " secs", sep=""))
sayesinde, Chase, bu görebiliriz aradığım şey ... – Produnis
@Gavin - Açıklık veya performans noktalarındaki farkı anlamıyorum. R-doc'lar oldukça açık ki, '' '' FUN' için ek parametreler içindir, bu yüzden usulüne uygun olarak not edilmiştir. Bununla birlikte, bu anonim işlev yeteneğine gereksinim duymak karmaşıklıktaki küçük bir sıçrama ve OP'nin daha önce bu "hileyi" bilmediğini tahmin ediyorum. – Chase
Gerçekten de, bir oylama değil, bir yorum. Hiç yazdığın şeyle ilgili yanlış bir şey yok. Eleştiri olarak değil. –