2013-09-25 40 views
0

中定義的特定環境編輯函數我正在嘗試使函數cv.glm(程序包boot)適應我的特定需求;具體來說,我的預測變量需要根據每個排列中使用的樣本進行微調。這似乎很簡單,可以在函數中添加幾行,然後將其重命名爲我自己的函數(「cv.glm2」)。不幸的是,內部功能sample0一個不再在我發現版本:如何使用R

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正在做什麼,因此我無法撥打此電話。 任何幫助將不勝感激。

回答

1

由於您只是在GlobalEnvironment中創建了一個新函數,它不知道在哪裏可以找到不從原始函數派生出的函數。您只需使用:::運算符明確告訴它在哪裏找到它們。所以例如

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) 
} 
+2

如果沒有出口的功能,你需要三個冒號:'boot ::: sample0'。 –

+0

@VincentZoonekynd當然,感謝您的更正。 –

+0

優秀!感謝你們兩位,我只是想問一下關於出口的錯誤。乾杯! –

1

假設cv.glm是讓新的編輯功能,試試這個,這樣cv.glm查找免費對象(如sample0)在正確的地方:

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