У меня есть фрейм данных с переменной ответа Y и тремя факторами: factor.a, factor.b и factor.c
Я пытаюсь написать функцию
удалит столбцы из фрейма данных, если все уровни фактора одинаковы
добавит термин "beta.factor".x [1..n] 'к вектору параметров при наличии более одного уровня фактора, до 5 уровней.
исключить параметр beta.factor.b [1] из списка (это исправлено)
Вот мой код.Я думаю, что это выглядит хорошо и работает хорошо, но я прочитал, что лучше избегать вложенных циклов, поэтому мне любопытно, есть ли более эффективный подход.
data <- data.frame( y = c(1,2,3,4),
factor.a = c(1, 1, 2, 1),
factor.b = c(1, 2, 2, 3),
factor.c = c(0, 0, 0, 0))
model.parms <- list(factor.a = length(unique(data$factor.a)),
factor.b = length(unique(data$factor.b)),
factor.c = length(unique(data$factor.c)))
vars <- 'beta.o'
for (x in c('factor.a','factor.c', 'factor.b')) {
if(model.parms[[x]] == 1) {
data <- data[, -which(names(data) == x)]
} else {
m <- min(model.parms[[x]], 5)
for (i in 1:m) {
if(!i == 1 && x == 'factor.b') {
vars <- c(vars, paste('beta.', x, '[', i, ']', sep=''))
}
}
}
}