2012-07-27 62 views
2

我正在使用rEMM程序包,並且希望添加一個與fade非常相似的函數。如何添加我自己的函數以使用之前安裝的程序包中的方法R

稍微背景:該功能是基於數據的時間結構的「衰落」數據流。權重計算爲w = 2^{-lambda t}。我只想將此方法的權重修改爲1/(1+(T-t/c)^lambda)。在這種情況下,我需要將兩個附加參數傳遞給新函數:Tc與原始fade函數相比較。 看來,當前腳本fade.R之間的唯一區別是24-30行,我會創建新的lambda_factor

我絕對不知道該怎麼做。

任何幫助,將不勝感激。

+1

您是否希望修改程序包本身,或者您是否願意擁有一個「fade」函數來執行您指定的操作? – 2012-07-27 04:05:25

+0

我真的不想修改這個包,但可能只是在這個函數上有一個包裝。 – notrockstar 2012-07-27 16:28:51

回答

2

如果您對當前的淡入淡出功能,看起來像代碼:

fade <- function(...){ 
    ... 
} 

只需複製該代碼,讓你想修改(你似乎知道你想要什麼),然後只需運行碼。您的新功能將顯示在全球環境中,並且每次調用淡出(...)時都會被調用。

4

fade的作者似乎已將lambda暴露爲可以指定的參數。尋找與showMethods(fade, includeDef=TRUE)代碼,一切都在rEMM:::.fade,在這裏我們看到

> rEMM:::.fade 
function (x, t = 1, lambda = NULL) 
{ 
    if (is.null(lambda)) 
     lambda_factor <- [email protected]_d$lambda_factor 
    else lambda_factor <- 2^(-lambda) 
    [email protected]_d$counts <- [email protected]_d$counts * lambda_factor^t 
    [email protected]_d$mm <- smc_fade([email protected]_d$mm, lambda_factor^t) 
    invisible(x) 
} 
<environment: namespace:rEMM> 

因此,而不是寫一個新功能的結束,爲什麼不計算lambda你喜歡的方式,轉化使lambda_factor在此使用功能與轉化一致

mylambda <- function(t, lambda, T, c) 
    -log(1/(1+(T-t/c)^lambda)), 2)/t 

,然後調用fade作爲

fade(x, t, mylambda(t, lambda, T, c)) 

?將其進一步包裝爲

myfade <- function(x, t, lambda) 
    fade(x, t, mylambda(t, lambda, T, c)) 
+0

嗨Matrin,這是非常接近的,然而,作者使用指數函數衰落,'f = 2^{ - lambda * t}',我希望完全替換這個函數。在這種情況下,修改lambda並不會做到這一點,因爲我必須修改函數本身(新的衰落函數不再是指數函數,而是sigmoid),所以當更改'x @ tnn_d $時不會有'lambda_factor^t'計數' – notrockstar 2012-07-27 16:25:58

+0

我的意圖是解決2 ^( - lambda_0 t)== 1 /(1 +(T - t/c)^ lambda) - > lambda_0 = - log_2(1 /(1 + c)^ lambda))/ t,這樣函數的主體不需要改變。 – 2012-07-28 00:27:45

+0

但我試過,我無法產生輸出.... – notrockstar 2012-07-30 17:00:03

相關問題