首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pass公式作为函数参数

pass公式作为函数参数
EN

Stack Overflow用户
提问于 2018-03-10 07:32:52
回答 2查看 285关注 0票数 1

下面是一个函数,用于从一定的x范围返回给定公式的数值最大值。

一切都很好,如下所示。

代码语言:javascript
复制
  MAX_FN_XY = function(Fn, x1 = 0, x2 = 100)
  {
    x = seq(x1, x2, by= 0.001)
    i = which.max(Fn(x))
    x_max = x[i]
    y_max = Fn(x[i])
    return (c("X*" = x_max,"Y*" = y_max))
  }

  MAX_FN_XY(function(q){q-2*q^2})
代码语言:javascript
复制
Output :

   X    Y

0.250 0.125 

为了使函数调用更加简洁,是否可以重写脚本以实现以下目的,即去掉“函数(Q)”部分?

代码语言:javascript
复制
MAX_FN_XY(q-2*q^2)

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-03-10 08:59:43

您可以这样做,但是Fn参数必须是引号。否则,R将试图评估它的现状(这是一件好事)。此外,引用的函数需要使用相同的变量名,这是嵌套函数的形式参数,您希望它是q,所以它是q)。

代码语言:javascript
复制
MAX_FN_XY <- function(Fn, x1 = 0, x2 = 100){
  f <- function(q){
    parse(text = Fn)
  }
  x= seq(0, 100, by = 0.1)
  i = which.max(eval(f(x)))
  x_max = x[i]
  y_max = eval(f(x[i]))
  return(c("X*" = x_max, "Y*" = y_max))
}

MAX_FN_XY(Fn = "q-2*q^2")
# X*  Y* 
# 0 -28 

你应该知道,使用解析会让我不舒服,而且我不是唯一一个。我认为,如果答案是解析,你问错了问题,这是一个公理。

票数 0
EN

Stack Overflow用户

发布于 2018-03-11 09:53:06

您可以将一个表达式(使用"q“作为变量)传递给您的过程,如下所示(请参阅高级R中的文档):

代码语言:javascript
复制
MAX_FN_XY = function(expr, x1 = 0, x2 = 100) {
  Fn = eval(call("function", as.pairlist(alist(q=)), substitute(expr)))
  x = seq(x1, x2, by= 0.001)
  i = which.max(Fn(x))
  x_max = x[i]
  y_max = Fn(x[i])
  return (c("X*" = x_max,"Y*" = y_max))
}
MAX_FN_XY(q-2*q^2)
# X* 0.25
# Y* 0.125
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49206528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档