Hadley Wickhams'ın Github hakkındaki kitabı, özellikle this part on lazy evaluation. Orada add/adders
fonksiyonları ile tembel değerlendirme sonuçları bir sonuç verir. Let me alıntı Sinirin: Eğer toplayıcının biri diyoruzBir tembel değerlendirmeyi açıklayın
add <- function(x) {
function(y) x + y
}
adders <- lapply(1:10, add)
adders[[1]](10)
adders[[10]](10)
tembel ilk kez değerlendirilir x: lapply üretilen ambalajlar veya bir döngü oluştururken
Bu [tembel değerlendirme] önemlidir fonksiyonlar. Bu noktada, döngü tamamlandı ve x x'in son değeri 10'dur. Bu nedenle, toplayıcı işlevlerinin tümü, muhtemelen istediğinizi değil, girişine 10 ekleyecektir! O biraz anlamak görünmüyor
add <- function(x) { force(x) function(y) x + y } adders2 <- lapply(1:10, add) adders2[[1]](10) adders2[[10]](10)
ve açıklama asgari vardır: Manuel sorunu değerlendirme düzeltmeleri zorlayarak. Birisi bu özel örneği hazırlayabilir mi ve orada neler olduğunu açıklayabilir mi? "Bu noktada, döngü tamamlandı ve x'in son değeri 10" cümlesiyle özellikle şaşırıyorum. Hangi döngü? Hangi final değeri, nerede? Eksik olduğum bir şey olmalı, ama göremiyorum. Şimdiden çok teşekkürler.
Not aşağıya cevabımı bakın. – jhin
@ jhin'in yorumuyla ilgili yorum: 'lapply() 'son R'de değişirken,' lapply() 'nin olduğu yerde kullanılmak üzere tasarlanmış olan purrr :: map()' fonksiyonu, eski gibi davranıyor. lapply() 'nin kapalı kapılardaki paylaşılan ortamları. Ancak, purrr :: map() 'ın bu“ anachronism ”ına sadık kalmayacağım, çünkü gelecek sürümlerde büyük olasılıkla düzeltilecek. – egnha
@jhin Aslına bakılırsa, hadley'nin öğretisi github'dan direk olarak inşa edilmiştir, bu yüzden R 3.2.0'dan sonra okumak o kadar tuhaftır ki, bu sürüm, eğitimsel tartışmada tembel değerlendirme hakkında tüm bölümü hazırlamıştır: “adders” ile daha fazla bir fark yoktur. 'adders2' çıktıları! –