2016-03-18 2 views
1

У меня есть следующие функции:Установка изменения для цикла переменной в модели формулы

sincos.chooser <- function(mod,min,max) { 
    my.aic.sincos <- matrix(NA, ncol=2, nrow=max) 
    for(k in c(min:max)) { 
    sincos.update <- update(mod, .~. + I(cos(2*pi/k*(order.ID))) + I(sin(2*pi/k*(order.ID)))) 
    my.aic.sincos[k,] <- c(k,AIC(sincos.update)) 
    } 
    my.aic.sincos 
} 

Но когда я запускаю функцию, я получаю следующее сообщение об ошибке:

Error in get("k") : object 'k' not found 

Как я сделать изменяющаяся переменная k признана в функции обновления моего цикла?

Я предполагаю, что проблема заключается в том, что функция обновления предполагает, что «k» - это имя столбца в моем data.frame и, следовательно, не может найти объект. Я хочу, чтобы он отображал «k» как переменную, а не как имя параметра.


Update: Я попытался с помощью get('k') вместо просто "к". Это работает, если я перемещаю функцию update вне функции «sincos.chooser», но создает ту же ошибку, что и выше, когда используется внутри моя функция.


Для тех, кто хочет видеть мои данные & модель:

Оригинальная модель:

gls(GDD ~ year + pdo, data = dat) 

Формат моих данных:

> dat 
    year month temp.avg ppt.avg  GDD pdo order.ID 
1 1922  1 0.4935484 0.3535484 14.40737 -0.45   1 
2 1923  2 4.3892857 0.4542857 56.03017 -1.51   2 
3 1924  3 7.3032258 0.5435484 106.49244 -1.76   3 
4 1925  4 12.8533333 0.2583333 239.07739 -1.71   4 
5 1926  5 19.7903226 0.4667742 458.50000 -1.61   5 
6 1927  6 24.2766667 0.3146667 578.30000 -1.11   6 
+0

он работает с 'as.formula' в вызове обновления? –

+0

@KarstenW. это не работает. Я получаю ту же ошибку. – theforestecologist

ответ

0

Это ча Nnot быть опрятным способом сделать эту работу, но является решением:

Использование formulaиpaste0:

sincos.update <- update(mod, formula(paste0('.~. + I(cos(2*pi/',k,'*(order.ID))) + I(sin(2*pi/',k,'*(order.ID)))'))) 
+0

Я приветствую ответы лучше! – theforestecologist

Смежные вопросы