如何通过 ... 将附加参数传递给 boot() 中的统计参数

How to pass additional parameters via ... to statistic parameter in boot()

我正在尝试确定如何使用 ... 将附加参数传递给 R 中函数 boot() 中的参数 statistic。在阅读?boot时,它说 “传递的第一个参数将始终是原始数据。第二个将是定义 bootstrap 样本的索引、频率或权重的向量....任何进一步的参数都可以传递给 statistic 通过 ... 论点。但我不确定这实际上看起来如何练习。

这是一些示例代码 -- statFun 是一个函数,它接受一些数据和 returns 平均值。如果通过 ... 命令传递了额外参数,它会将数据集中在这些额外参数周围,然后 returns 平均值:

statFun <- function(funData, indices, ...)
{
  # Check to see if extra parameters
  extraPar <- list(...)
  if(extraPar[[1]])
  {
    result <- mean(funData[indices] - extraPar[[2]])
  }else
  {
    result <- mean(funData[indices])
  }

  # Return the value
  return(result)
}

# Testing statFun
testData <- 1:20 ; testIndices <- length(testData) 
statFun(testData, testIndices, FALSE) # Returns 10.5
statFun(testData, testIndices, TRUE, mean(testData)) # Returns 0

现在,如果我尝试在 boot 中应用此函数,我 运行 会遇到问题:

boot(testData, statFun, R = 100)

这给了我 Error in extraPar[[1]] : subscript out of bounds。如果我尝试将 FALSE 传递给 statFun,但仍然会出现相同的错误。我能理解我的范围界定是如何不正确的,但我该如何克服呢?我已经阅读 this and this post 以了解如何更好地使用 ...,但我似乎遗漏了一些明显的东西......

这是我的第一个 SO post,所以如果我的问题不符合指南,请告诉我。谢谢你的帮助。

多亏了 user20650 并更仔细地阅读了 ?boot 示例,我弄清楚了需要什么 - 只是为了确保我在 statFun 中的参数被命名并且我在 boot 的调用中引用了这些名称。简单的东西:

statFun <- function(funData, indices, addPars, centerMean)
    {
      # Check to see if extra parameters
      if(addPars)
      {
        result <- mean(funData[indices] - centerMean)
      }else
      {
        result <- mean(funData[indices])
      }

      # Return the value
      return(result)
    }

现在,当我在引导中应用它并使用名称 addParscenterMean 时,我得到了我期望的结果:

boot(testData, statFun, R = 100, extraPar = TRUE, numCenter = mean(testData)) 
# Returns boot object of data centered around the mean.

现在当然明白...了。