2012-07-27 61 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

相关问题