如何使用R中定义的特定环境编辑函数

时间:2013-09-25 13:04:25

标签: r function

我正在努力使函数cv.glm(包boot)适应我的特定需求;具体而言,我的预测变量需要根据每个排列中使用的样本进行轻微调整。这似乎很简单,可以在函数中添加几行,然后将其重命名为我自己的函数(“cv.glm2”)。不幸的是,在我的版本中找不到其中一个内部函数sample0

 Error in cv.glm2(DF, glm1, K = 2) : could not find function "sample0"

这似乎与cv.glm()函数中定义的环境有关。通过打印出函数,我看到最后两行是:

cv.glm
...
<bytecode: 0x0000000010117220>
<environment: namespace:boot>

我想知道如何定义我的新功能环境以查找sample0。或者,如果没有太大差异,我可以替换sample。由于我既看不到sample0正在做什么,我也无法拨打这个电话。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

由于您只是在GlobalEnvironment中创建一个新函数,它不知道在哪里可以找到未从原始函数的pacakge导出的函数。您只需要使用:::运算符明确告诉它在哪里找到它们。所以例如

cv.glm2 <-
function (data, glmfit, cost = function(y, yhat) mean((y - yhat)^2), 
    K = n) 
{
    #  // Some other code here //  #

    #  Tell it which package the unexported  function resides in
    s <- boot:::sample0(rep(1L:K, f), n)
}

答案 1 :(得分:1)

假设cv.glm是您新编辑的功能,请尝试此操作,以便cv.glm在正确的位置查找免费对象(例如sample0):

environment(cv.glm) <- environment(boot::cv.glm)