2013-09-25 5 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, она не знает, где найти функции, которые не экспортируются из 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) 
} 
+2

Если функция не экспортируется, вам нужно три colons: 'boot ::: sample0'. –

+0

@VincentZoonekynd, конечно, спасибо за исправление. –

+0

Отлично! Спасибо вам обоим, я как раз собирался спросить об ошибке относительно экспорта. Ура! –

1

Предполагая cv.glm ваша новая отредактированная функция, то попробуйте это так, что cv.glm смотрит свободные объекты (такие как sample0) в нужном месте:

environment(cv.glm) <- environment(boot::cv.glm) 
Смежные вопросы