2017-06-21 119 views
1

我想知道是否有可能在R中訪問該函數之外的被調用函數的參數? 例如,如果我有以下功能:如何在R中訪問函數外部的被調用函數的參數?

testfunc = function(a,b,c=1,d=2){ 
return(list(res1 = a+b,res2 = c+d)) 
} 

,我叫那個函數像這樣:

testfunc(4,5) 

我想辦法進入功能外每個參數的值,而不會增加函數內部的任何東西,比如match.call等等。所以,理想情況下我想要一個包裝函數 getarguments(testfunc(4,5))並返回: a = 4,b = 5,c = 1,d = 2

這是可能的樂?非常感謝。

+0

你能解釋一下爲什麼你要這樣做嗎? – Dason

+0

我想要一個簡單的方法來爲調試目的全局定義函數參數。 –

+1

我還沒有完全理解你想要做什麼。但是,如果你能夠更詳細地解釋這個問題,似乎可能有更好的方法來實現你的實際目標。 – Dason

回答

3

我當然不會推薦這樣做,但它在理論上是可行的。如何

getarguments <- function(x) { 
    call<-substitute(x) 
    fx<-eval.parent(call[[1]]) 
    body(fx) <- as.call(list(quote(`{`), quote(return(mget(ls()))))) 
    call[[1]] <- fx 
    eval.parent(call) 
} 
getarguments(testfunc(4,5)) 

返回

list(a = 4, b = 5, c = 1, d = 2) 

當過我需要做這樣的事情,我傾向於使用debugonce(testfunc)。然後您可以撥打testfunc(4,5)並進入瀏覽器。您可以打印此時想要的任何變量。請參閱?browser幫助頁面。

+0

我喜歡這個答案,因爲它可以解決問題中的問題。但是我認爲,從他們在評論中描述的內容來看,他們通過學習「調試」和「瀏覽器」會更好。 – Dason

+0

@Dason我也添加了這個信息。我同意這很重要。 – MrFlick

+0

非常感謝Dason和MrFlick的幫助。這正是我想要做的。我也研究過調試和瀏覽器,它們看起來也很有用。乾杯。 –

相關問題