Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 有没有一种方法可以编写一个函数,将函数之和移位一个参数?_R_Function - Fatal编程技术网

R 有没有一种方法可以编写一个函数,将函数之和移位一个参数?

R 有没有一种方法可以编写一个函数,将函数之和移位一个参数?,r,function,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(

我是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解决此问题

我一直在考虑循环和应用函数,但没有设法克服这个问题。此外,我还没有发现任何类似的问题在互联网上


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

类似的建议可能会奏效。如果您有一个数据帧,其中包含了要输入到各个函数中的所有值,则可以将公式传递给函数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)
require(purrr)
如果你有一个函数,lamda_shift

f <- function(x) x

f您可以在循环中创建一个字符串,然后使用eval(parse(x))来创建一个新函数,我不确定我是否遵循了它。您似乎只是在用
x-a
调用
f()
。你能在这里给出实际函数的例子吗?还有一些例子,我们可以用来测试,给出特定的输入和期望的输出?写一个函数返回另一个函数并进行一些移位,应该不会太难。@MrFlick,谢谢你的回答!如果我理解正确的话,f1()和f2()是数据x的经验分布函数,已经被不同的参数移位了,我希望两者都被a移位。我使用f()作为它们的和的表达式。而写“一个函数返回另一个函数并进行一些移位”正是我想要做的,也许类似于
shiftf@MrFlick,谢谢!这似乎是我需要的。但是,您能解释一下shiftf的代码应该是什么样子吗?至于具体内容,x是一个由10个条目组成的列表,因此如果将其移位2,那么如果
f(x)=f(c(1,2,3,…,10))
我们应该得到
f(x-2)=f(c(-1,0,1,…,8))
非常感谢!我一定要更详细地研究R中的函数。谢谢你的回答!这可能是正确的,但作为一个初学者,我并不真正理解这里发生了什么。完全理解。这里是一些dplyr编程的良好起点。非常感谢。我认为这将非常有用。
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