R 如何通过传递其他参数。。。在boot()中添加统计参数

R 如何通过传递其他参数。。。在boot()中添加统计参数,r,parameter-passing,optional-arguments,R,Parameter Passing,Optional Arguments,我正在尝试确定如何使用…将附加参数传递到R中的函数boot()中的参数statistic。在阅读?boot时,它说 “传递的第一个参数始终是原始数据。第二个参数是定义引导样本的索引、频率或权重向量……任何进一步的参数都可以通过…参数传递给统计数据。但我不确定这在实践中会是什么样子 下面是一些示例代码--statFun是一个函数,它接收一些数据并返回平均值。如果通过…命令传递额外的参数,它将围绕这些额外参数集中数据,然后返回平均值: statFun <- function(funData,

我正在尝试确定如何使用
将附加参数传递到R中的函数
boot()
中的参数
statistic
。在阅读
?boot
时,它说 “传递的第一个参数始终是原始数据。第二个参数是定义引导样本的索引、频率或权重向量……任何进一步的参数都可以通过
参数传递给
统计数据。但我不确定这在实践中会是什么样子

下面是一些示例代码--
statFun
是一个函数,它接收一些数据并返回平均值。如果通过
命令传递额外的参数,它将围绕这些额外参数集中数据,然后返回平均值:

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
这使我在extraPar[[1]]中出现了
错误:下标超出范围
。如果我尝试将
FALSE
传递到
statFun
中,但仍然会得到相同的错误。我可以理解我的作用域是如何不正确的,但我如何克服这一点?我已经阅读并发布了一些文章,以更好地理解如何使用
,但我似乎遗漏了一些显而易见的东西

这是我的第一篇SO帖子,如果我的问题不符合指导原则,请告诉我。谢谢您的帮助。

感谢并阅读
?引导
示例更仔细一点,我了解了需要什么——只是为了确保
statFun
中的参数已命名,并且我在ca中引用了这些名称所有的
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)
    }

当然,现在可以了解更多了。

我得到了结果20和9.5(我希望是这样)。我认为帮助意味着您可以通过
..
传递多个参数,但要真正做到这一点,并传递到引导,您可能应该命名它们:因此使用
statFun事实上,
..
argumnet的帮助说明“统计数据的其他命名参数在每次调用它时都会保持不变(emphasis mine)是的--我刚刚开始处理它,并将我的
statFun
更改为包含命名参数,而不是像您提到的那样通过
使它们变得模棱两可。谢谢您的帮助,解决了这个问题。
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)
    }
boot(testData, statFun, R = 100, extraPar = TRUE, numCenter = mean(testData)) 
# Returns boot object of data centered around the mean.