R中函数内未使用的参数

时间:2015-07-13 15:02:42

标签: r function arguments newtons-method

以下是我的代码。它适用于原始函数,例如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的最大可能性估计值)。

1 个答案:

答案 0 :(得分:3)

问题是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)