【问题标题】:Understanding the `optimize` function了解“优化”功能
【发布时间】:2019-01-24 01:31:10
【问题描述】:

我是 R 新手,我的问题是针对初学者的。

我有

kappa <- c(0.0001, 0.001, 0.01, 0.1, 0.5, 0.9, 0.99, 0.999, 0.9999)

我不明白为什么

var_optim <- sapply(kappa, function(t) 
  optimize(function(x) abs(FX_fun(x) - t), c(-2,2))$minimum)

工作正常,但是

var_optim <- optimize(function(x) abs(FX_fun(x) - kappa), c(-2,2))$minimum 

没有

这两个表达式有什么区别,因为我认为它们两个是一样的

我收到一条回复,告诉我在我的第一个语句中 t 是一个标量,而它不在我的第二个语句中。

事实上,在我的第一个语句中,我不明白 t 是如何成为标量的。因为根据我的理解,它是一个标量,我们应该写的是

var_optim

谢谢!

【问题讨论】:

    标签: r optimization


    【解决方案1】:

    kappa 是一个向量,而第一条语句中的 t 是一个标量。我假设FX_fun(x) 也是一个标量,所以计算abs(FX_fun(x)-t) 也是一个标量,并且优化会看到一个标量值函数,它会很乐意优化。

    另一方面,在第二条语句中FX_fun(x)-kappa也是一个向量:标量减向量在R中工作,它只是对kappa的每个元素进行减法,结果是一个向量。但是现在 optimize 看到一个向量值函数,显然不能优化这个。


    以下是 sapply 的工作原理:sapply(v, f) 采用函数 f 和向量 v,将 f 应用于 v 的 eash 元素,并使用结果构建向量 w。也就是说,在数学上 w(i)=f(v(i)),但 f 只将标量值作为参数(v 的元素,一一对应)。

    【讨论】:

    • 谢谢,我不明白为什么我的第一个语句中的 t 是标量。不会取 kappa 的值吗?我的意思是我所做的是: var_optim
    • kappa 的值是数字(标量)。所以,t,一个接一个地获取kappa 的值,总是有一个标量值。我更新了答案。循环值完全等同于循环i 并取值kappa[i]。还要考虑 R 中的 for 循环:它从不在整数上循环,但总是在向量的值上循环。这是for (x in v)。符号1:n 只是表示向量c(1, ..., n) 的语法糖。 sapply 也会发生同样的情况(而且您通常不需要实际的索引)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多