【问题标题】:Extract the results of a function提取函数的结果
【发布时间】:2012-02-17 22:01:53
【问题描述】:

我有以下要最小化的功能:

calloptim <- function( under,strike, rf, ttoe,par) {(-(under*par[1]
  -strike*exp(-rf*ttoe)*par[2]))^2}

我创建了以下对象:

res<- nlminb(c(1,1), calloptim, under= 90, strike = 100, rf =0.05, ttoe=3)

res

$par
[1] 0.9771973 1.0218072

$objective
[1] 3.412923e-16

$convergence
[1] 1

$iterations
[1] 2

$evaluations
function gradient 
      34        4 

$message
[1] "false convergence (8)"

这很好,但现在我想获取 $par 估计值并将它们放入一个向量中,以便我可以将它们用于其他计算。

如何隔离并仅保存对象的部分结果?

【问题讨论】:

    标签: r function


    【解决方案1】:

    以下都是大致等价的:

    res$par
    res["par"]
    res[1]
    res[[1]]
    

    查看?Extract 的帮助页面了解详情。我经常发现查看对象的str() 在尝试查找从何处获取内容时很有帮助,即要提取的对象的名称或它在您正在查看的对象中的数字位置(在这种情况下为 1 )。

    【讨论】:

    • 我猜 OP 会更喜欢这些选项中的第一个和第四个...res[["par"]] 是另一个选项(相当于 #1 和 #4)
    • 我可能会在这个答案中包含一个注释,即res[1]res[[1]] 之间存在一个重要区别,这通常会引起混淆。
    【解决方案2】:

    不知道这是否完全回答了您的问题,但是:

    vector <- res$par
    > vector
    [1] 0.9771973 1.0218072
    > vector[1]
    [1] 0.9771973
    

    可能有一个更“合适”的访问器方法。

    【讨论】:

    • 没有更好的访问器方法(尽管这是一个非常值得考虑的问题)。 nlminb()的结果类是list
    • 啊,谢谢!我的天真错误,没有验证输出类型。
    【解决方案3】:

    使用newVals &lt;- res$par$par 成员从res 中拉出

    【讨论】:

      【解决方案4】:

      如果这是您的 previous question 的扩展,您可以使用以下方法提取这些嵌套答案:

      out <- apply(f, 1, nlminb, objective=calloptim, under=90, strike=100, rf=0.05, ttoe=3)
      out.par <- lapply(out, '[',1)
      unlist(out.par, recursive=FALSE)
      

      【讨论】:

      • 谢谢贾斯汀。这将是下一个问题,所以你读懂了我的想法。在发布这个问题之前,我输入了 out$par 并返回 NULL。
      • 不客气。在这个问题和您的其他问题上,习惯上对有助于解决您的问题的答案进行投票并接受那个答案。 (我们将赢得声誉,您将赢得声誉和徽章。)
      • 啊,明白会做,当我的代表达到 15 岁时会投票。
      • 在这种情况下,括号被用作函数。请参阅?'[',您可以将'[' 视为subset 的简写。除了apply 家族正在寻找函数而您提供的函数恰好是'[' 这种特殊情况外,您几乎总是会成对使用括号。
      猜你喜欢
      • 2020-02-07
      • 2015-09-27
      • 1970-01-01
      • 2016-02-27
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多