2017-12-14 181 views
5

Bazı bağımsız değişkenleri k alan ve n bağımsız değişkenini alan ancak işlev gövdesinde k kullanan başka bir işlev döndüren bir işlev var.Parçalı değişkenle işlev gövdesi yazdırma

makeFn <- function(k) { 
    function(n){ 
    rep(k,n) 
    } 
} 

five <- makeFn(5) 

five(3) 
# [1] 5 5 5 

body(five) 
# { 
# rep(k, n) 
# } 

nasıl five vücut yüzden rep(5,n) yerine rep(k,n) gösterdiği yazdırabilir?

+0

Bir çözümün ne kadar esnekliğe ihtiyacınız var? İç içe geçmiş fonksiyonların daha fazla seviyesi olabilir mi? Bu basit durum için, uygun "env" argümanıyla 'substitute' kullanabilirsiniz. SInce 'yerine' ilk argümanını değerlendirmez, 'eval (call ("substitute", body (beş), environment (5))) gibi bir çağrı yapmamız gerekir. –

cevap

0

Bir seçenek eval ve bquote'u birleştirmektir. .() notasyonu parantez içinde ne varsa değerlendirmek için bquote anlatıyor

makeFn <- function(k) { 
    eval(bquote(function(n) rep(.(k),n))) 
} 

five <- makeFn(5) 
body(five) 
# rep(5, n) 

ardından ifadesi sonucu sayılabilir.