我是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解决此问题?
我一直在考虑循环和应用函数,但未能克服这个问题。另外,我在互联网上还没有发现与此问题类似的东西。
我非常感谢您的帮助,很高兴阅读您的建议。
答案 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)