Вы можете использовать идиому ...
, чтобы сделать это. Вы включаете ...
в определение аргумента своей функции, а затем в вызовы lm()
включаете ...
в качестве дополнительного аргумента. ...
фактически является заполнителем для всех дополнительных аргументов, которые вы хотите передать. Вот (не проверенная) модификация вашей функции, которая использует этот подход:
modelfit <- function(order, response, predictor, site, ...) {
if(order == 0) {
m <- lm(response ~ 1, ...)
} else if (is.numeric(order)) {
m <- lm(response ~ poly(predictor, order), ...)
} else if (order == 'monod') {
x<-predictor
m <- nls(response ~ a*x/(b+x), start = list(a=1, b=1), ...)
} else if (order == 'log') {
m <- lm(response ~ poly(log(predictor), 1), ...)
}
AIC(m)
}
Затем вы вызываете эту функцию и предоставляете повторные аргументы вместо ...
:
with(myData, modelfit(2, myResponse, myPredictor, mySite, data = myData,
na.action = na.exclude, subset = block == mySite))
, где myResponse
, myPredictor
и mySite
- переменные, которые вы хотите использовать, существует в вашем myData
фрейме данных.