【问题标题】:Unused arguments within a function in RR中函数中未使用的参数
【发布时间】:2015-10-01 22:11:51
【问题描述】:

下面是我的代码。它适用于原始函数,例如 sin。但是,当使用名为 gllik 的函数时,它会在 f(y0) 中返回错误:未使用的参数 (y0)。我不知道如何纠正这个问题。

newton_search2 <- function(f, h, guess, conv=0.001) {
   y0 <- guess
   N = 100
   i <- 1; y1 <- y0
   p <- numeric(N)
   while (i <= N) {
      make_derivative <- function(f, h) {
       (f(y0 + h) - f(y0 - h)) / (2*h)
       }
    y1 <- (y0 - (f(y0)/make_derivative(f, h)))
    p[i] <- y1
    i <- i + 1
    if (abs(y1 - y0) < conv) break
    y0 <- y1
 }
 return (p[(i-1)])
}

gllik函数如下:

x <- rgamma(n=30, shape=4.5)
gllik <- function() {
 s <- sum(log(x))
 n <- length(x)
 function(a) {
   (a - 1) * s - n * lgamma(a)
   }
 }

我使用的代码是:

newton_search2(gllik, 0.001, mean(x), conv = 0.001)

我不确定如何修复错误或得到正确答案,应该是 4.5(a 的最大似然估计)。

【问题讨论】:

  • 你的代码没有被注释,你的问题不是一个真正的问题。返回错误的代码是什么?
  • 哦,对不起。我忘了包括那个。我输入的代码是 newton_search2(gllik, 0.001, mean(x), conv = 0.001) 然后我得到一个错误,说 y0 是一个未使用的参数。我不确定如何完成这项工作。
  • 除非我有误解,否则 gllink 不是数学函数。它是一个返回函数的函数。如果你使用它会起作用:newton_search2(gllik, 0.001, mean(x), conv = 0.001)

标签: r function arguments newtons-method


【解决方案1】:

问题是 gllik 不接受任何参数。此外,它返回的是一个函数而不是一个值。

也许你想要的是以下?

gllik <- function(a) {
  s <- sum(log(x))
  n <- length(x)
  return((a - 1) * s - n * lgamma(a))
}

编辑:另一种解决方案是只使用返回的函数。虽然这种类型的构造通常很优雅,但在这种情况下似乎有点矫枉过正:

newton_search2(gllik(), 0.001, mean(x), conv = 0.001)

【讨论】:

  • 我相信 gllik 应该返回一个数值。我不知道该怎么做。
  • 也许考虑将所有需要的变量放入 gllik。范围界定允许你不这样做,但也许让它更明确一点。或函数(a,...)
  • 那行得通。然而,它给了我两倍的答案。我想我必须以某种方式取两次导数。
  • 这似乎是你的优化方法有问题。比较:optim(1, gllik, method = 'Brent', lower = 0, upper = 100, control = list(fnscale = -1))
  • 当我将 R Markdown 文件编织成 HTML 时,每次编织时这段代码都会给我不同的答案。
猜你喜欢
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 2012-05-03
  • 1970-01-01
相关资源
最近更新 更多