当前位置:  开发笔记 > 编程语言 > 正文

传入函数作为输入和返回功能

如何解决《传入函数作为输入和返回功能》经验,为你挑选了2个好方法。

我想编写一个R函数,它接受一个数学函数x并返回一个新函数x作为输出.例如:

输入应作为数学函数(或关系)传入x:

g <- x^2 + 9*x + log(x)

结果输出应该是:

function(x) (exp(g))

即我想回到原来的功能的象征性指数表达x,即exp(x^2 + 9*x + log(x))在这个说明性的例子

理想情况下它会返回函数对象:

function(x) (exp(x^2 + 9*x + log(x)))

我尝试如下:

test <- function(g){
h <- function(x){exp(g)}
return(h)
}
m <- test(x^2 + 9*x + log(x))
m(10)

所以m(10)应该返回:

exp(10^2 + 9*10 + log(10))

在这种情况下是exp(192.3026).

有人能说明怎么做吗?



1> Roland..:

您可以使用包功能:

library(functional)
fun <- Compose(function(x) x^2 + 9*x + log(x), exp)
fun(1)
#[1] 22026.47


@SuperBiasedMan请停止发布这些无用的评论.
@SuperBiasedMan请考虑使用评论自动评论更多限制.虽然通用注释通常可以作为问答的建设性补充,但是注释无法识别需要冗长解释的代码与通常不会帮助改进StackOverflow上的内容的代码之间的差异.;)

2> Josh O'Brien..:

这是一种方法:

test <- function(e) {
    ee <- substitute(e)
    eee <- substitute(exp(X), list(X=ee))
    f <- function(x) {}
    body(f) <- eee
    environment(f) <- parent.frame()
    f
}

## Check that it works
m <- test(x^2 + 9*x + log(x))
m
# function (x) 
# exp(x^2 + 9 * x + log(x))
m(1)
# [1] 22026.47
m(1) == exp(10)
# [1] TRUE

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有