У меня возникают трудности с написанием функции «обертка», которая должна принимать все аргументы для существующей функции плюс один дополнительный аргумент, а затем выполнять некоторые вычисления на этот дополнительный аргумент, передать все исходной функции и вернуть результат.Ошибка в eval (expr, envir, cover): объект не найден
Насколько я понимаю, проблема в том, что функция, которую я пытаюсь «обернуть», не ищет аргумент, который я пытаюсь передать в локальной среде, но в глобальной среде. Я не знаю, как решить эту проблему.
Ниже приведен мой заголовок с минимальным кодом, который воспроизводит ошибку. В этом примере я не выполняю никаких вычислений в аргументе passtheseweights, потому что я не думаю, что вычисления релевантны для вопроса.
require(rpart)
df<-car.test.frame
wt<-runif(nrow(df))
wt<-wt/sum(wt)
df<-data.frame(df, wt)
#Attempt 1
wrapfun<-function(formula, data, passtheseweights, ...)
{
print(passtheseweights)
outputmodel<-rpart(formula=formula, data=data, weights=passtheseweights, ...)
return(outputmodel)
}
wrapfun(Price~Country + Reliability + Mileage + Type + Weight + Disp. + HP, data=df, passtheseweights=df$wt, method="anova", minsplit=4)
#Attempt 2
wrapfun<-function(formula, data, passtheseweights, ...)
{
print(data[,passtheseweights])
outputmodel<-rpart(formula=formula, data=data, weights=data[,passtheseweights], ...)
return(outputmodel)
}
wrapfun(Price~Country + Reliability + Mileage + Type + Weight + Disp. + HP, data=df, passtheseweights="wt", method="anova", minsplit=4)
#Attempt 3, this is working....
wrapfun<-function(formula, data, passtheseweights, ...)
{
print(passtheseweights)
outputmodel<-rpart(formula=formula, data=data, weights=passtheseweights, ...)
return(outputmodel)
}
wt<-df$wt
wrapfun(Price~Country + Reliability + Mileage + Type + Weight + Disp. + HP, data=df, passtheseweights=wt, method="anova", minsplit=4)
#But only because the function uses wt from the global environment. The same example also works if no passtheseweights argument is passed
wrapfun<-function(formula, data, ...)
{
print(passtheseweights)
outputmodel<-rpart(formula=formula, data=data, weights=passtheseweights, ...)
return(outputmodel)
}
passtheseweights<-df$wt
wrapfun(Price~Country + Reliability + Mileage + Type + Weight + Disp. + HP, data=df, method="anova", minsplit=4)
Если кто-нибудь знает, как я могу заставить rpart искать passtheseweights локально, ваша помощь будет чрезвычайно признателен!
Бест, CJ
Вы пробовали http://stackoverflow.com/a/22260104/6455166? –
Спасибо! Я прочитал несколько вопросов, относящихся к этому сообщению об ошибке, но, похоже, имел другую причину. Спасибо, что предупредили меня об этом вопросе, который явно затрагивает ту же проблему. –