有没有一种方法可以编写将某个函数的总和移动某个参数的函数?

时间:2019-04-30 12:31:54

标签: r function

我是R新手,最近遇到了以下问题。

我有一个x的函数f(x),它本身是相同数据的其他函数的总和,例如f(x) = 2 * f1(x) + 3 * f2(x)。我希望将这些函数移动一些参数a,从而导致表达式f(x - a) = 2 * f1(x - a) + 3 * f2(x - a)。稍后我有一些迭代过程,参数a在整个过程中不会保持不变,这意味着在下一步应该有f(x - a - b) = 2 * f1(x - a - b) + 3 * f2(x - a - b)等等,这就是为什么不显式更改函数的参数的原因可能。

因此,我有以下问题:是否有任何方法可以将写入函数f(x)的函数写入结果 fun(f(x)) = 2 * f1(x - a) + 3 * f2(x - a)

如果没有,如何使用R解决此问题?

我一直在考虑循环和应用函数,但未能克服这个问题。另外,我在互联网上还没有发现与此问题类似的东西。

我非常感谢您的帮助,很高兴阅读您的建议。

2 个答案:

答案 0 :(得分:1)

如果您有功能

f <- function(x) x

如果您想要转换版本,可以编写一个shiftf函数

shiftf <- function(f, a) function(x) f(x-a)

这是一个接受一个函数和一个偏移量并返回一个新函数的函数。您可以像

那样使用它
fnew <- shiftf(f, 2)

然后您可以致电

x <- 1:10
f(x)
# [1]  1  2  3  4  5  6  7  8  9 10
fnew(x)
#  [1] -1  0  1  2  3  4  5  6  7  8
shiftf(f, 2)(x)
#  [1] -1  0  1  2  3  4  5  6  7  8

答案 1 :(得分:0)

类似的事情可能起作用。如果您有一个要包含所有值的数据框,您希望将这些值放入各个函数中,则可以将公式传递给函数lambda_shift,它将返回输出。如果您在a列中有f()的结果,则可以传递lamda_shift(.x,.y(a-b))以获得结果。 b列包含移位值。

require(purrr)
lamda_shift<-as_mapper(~mutate(.x,
                                output =  2*(!!enquo(.y))+3*(!!enquo(.y))
                              )
                       )

df <- data.frame(a=rep(1:1),b=rep(6:10))
lamda_shift(.x=df,.y=a-b)