【问题标题】:How do I have a function that multiplies 2 functions in r?我如何有一个在 r 中乘以 2 个函数的函数?
【发布时间】:2020-02-14 04:51:47
【问题描述】:
w         <- -1
pqxf      <- function(y)(1)*(y) # replace p with price of y
pqyf      <- function(x)(w*x)-(w*16) # -1.25 is the wage rate
utilityf  <- function(x)(80)*(1/(x)) # the utility function C,l
hours     <- c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,20)

我正在尝试弄清楚如何将 pqxf 和 pqyf 相乘以生成实用程序 f

【问题讨论】:

  • 这些函数的输入是什么? xy 是两个不同的值向量吗?还是y 只是x 的变形?
  • 1) (1)*(y) == y。 2)utilityf 不需要参数y 吗? 3) 我看不到代码 cmets 和代码本身之间的关系:没有p,没有-1.25
  • 是的,很抱歉,当事情进展顺利时,cmets 会更有帮助。另外,p 是 w,我打算把它做成一个工资/休闲计算器和一个通用计算器,以比较不同价格商品的效用(这就是为什么 pqy 有一个 1。

标签: r algebra calculus


【解决方案1】:

要弄清楚utilityf 在这里应该是什么样子有点困难,所以让我们使用一个更简单的示例。我们有两个函数square()inverse(),我们想做一个计算,包括对一组数字a 求平方,然后乘以另一组数字b 的倒数。首先让我们创建平方和反函数:

square <- function(a) {
    a^2
}

inverse <- function(b) {
    1 / b
}

这些只是函数,在我们调用它们并向它们传递输入之前,它们不会做任何事情。

这是您在此问题的先前版本中尝试执行的操作:

output_bad <- function(a, b) {
    square * inverse
}

这不起作用,因为我们根本不调用平方和反函数,我们不给它们输入。所以我们最终尝试将一个 function 对象与另一个 function 对象相乘。

这是正确的做法:

output <- function(a, b) {
    square(a) * inverse(b)
}

我们提供ab 作为output 函数的输入,并对它们调用square 和inverse 以从这些函数中获取单独的结果,然后我们可以将它们相乘。现在我们可以将ab的不同值传递给output

> output(c(1, 2, 3), c(4, 5, 6))
# [1] 0.25 0.80 1.50

【讨论】:

  • 好的,我已经完成了所有工作,但是现在当我改变 w 的值时,它不会改变斜率或 utlilityf 的值
  • 我还收到一条错误消息,说它不能将 square 识别为函数。有没有我需要打开的图书馆?
  • @user801855:您可能希望将w 输入到utilityf,即utilityf &lt;- function(x, y, w),以便您可以显式更改它。函数如何使用全局变量的规则有点棘手,这就是为什么当您需要能够更改它们时,将它们作为参数通常是件好事。
  • 我以为我有 w 作为常数。当我为 w 分配不同的值时,我也不确定为什么 pqxf 的斜率不会改变。
  • @user801855 是的,这就是为什么我建议您更改utilityf 以便w 是一个参数,而不是从全局环境继承的值。这样您就可以为w 生成具有多个值的结果。
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 2017-01-09
相关资源
最近更新 更多