如何添加我自己的函数来处理R中先前安装的包中的方法

时间:2012-07-27 01:05:05

标签: r

我正在使用rEMM包,并希望添加一个与fade非常相似的功能。

一点背景:此功能基于数据的时间结构“衰落”数据流。权重计算为w = 2^{-lambda t}。我只想将此方法的权重修改为1/(1+(T-t/c)^lambda)。在这种情况下,我有两个额外的参数,我必须传递给新函数:Tc与原始fade函数进行比较。 似乎当前脚本fade.R之间的唯一区别是第24-30行,我将创建新的lambda_factor

我完全不知道该怎么做。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

fade的作者似乎已将lambda作为您可以指定的参数公开。查看代码showMethods(fade, includeDef=TRUE),所有内容都以rEMM:::.fade结尾,我们看到了

> rEMM:::.fade
function (x, t = 1, lambda = NULL) 
{
    if (is.null(lambda)) 
        lambda_factor <- x@tnn_d$lambda_factor
    else lambda_factor <- 2^(-lambda)
    x@tnn_d$counts <- x@tnn_d$counts * lambda_factor^t
    x@tracds_d$mm <- smc_fade(x@tracds_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))

答案 1 :(得分:2)

如果你有当前淡入淡出功能的代码,如下所示:

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

只需复制该代码,进行所需的修改(您似乎知道自己想要的内容),然后运行代码。您的新功能将出现在全局环境中,并在每次调用淡入淡出(...)时调用。