如何通过 ... 将附加参数传递给 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)
}
现在,当我在引导中应用它并使用名称 addPars
和 centerMean
时,我得到了我期望的结果:
boot(testData, statFun, R = 100, extraPar = TRUE, numCenter = mean(testData))
# Returns boot object of data centered around the mean.
现在当然明白...
了。
我正在尝试确定如何使用 ...
将附加参数传递给 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)
}
现在,当我在引导中应用它并使用名称 addPars
和 centerMean
时,我得到了我期望的结果:
boot(testData, statFun, R = 100, extraPar = TRUE, numCenter = mean(testData))
# Returns boot object of data centered around the mean.
现在当然明白...
了。