Freqüentemente, precisamos dividir um vetor em partes menores de tamanho mais ou menos igual e, subsequentemente, combinar diferentes partes em um vetor de subconjunto. No exemplo abaixo, o método leave-one-out é implementado:
set.seed(42); #Same result every time
inputVector = rnorm(22);
numberOfGroups = 4;
numberOfElements = floor(length(inputVector) / numberOfGroups);
groups = split(inputVector, sample(rep(1:numberOfGroups, numberOfElements)));
for(leaveOutGroup in seq(numberOfGroups)){
trainingPoints = unlist(groups[-leaveOutGroup], use.names = FALSE);
testPoints = unlist(groups[leaveOutGroup], use.names = FALSE);
#...
}
Observe que o comprimento do vetor de entrada inicial não precisa ser um múltiplo do número de grupos. No exemplo acima, dois dos quatro grupos terão comprimento seis e R dará um aviso, que pode ser suprimido por:
options(warn=-1)
Se os dados consistirem em mais de um vetor, podemos dividir os Ãndices com a mesma técnica e, em seguida, usá-los para escolher as respectivas entradas dos vetores de interesse:
options(warn = -1);
set.seed(42);
inputVector = rnorm(22);
outputVector = rnorm(length(inputVector));
indexVector = seq(length(inputVector));
numberOfGroups = 4;
numberOfElements = floor(length(inputVector) / numberOfGroups);
indexGroups = split(indexVector, sample(rep(1:numberOfGroups, numberOfElements)));
for(leaveOutGroup in seq(numberOfGroups)){
training = unlist(indexGroups[-leaveOutGroup], use.names = FALSE);
test = unlist(indexGroups[leaveOutGroup], use.names = FALSE);
#...
}
A função R amostra faz a amostragem aleatória e recolher o objecto fator que contém os grupos usando não listados , com use.names definidos para falsa.