This looks opaque and hard to maintain. It seems to me that a better strategy is to subset your vector with modulo expressions, use a normal sort on each of the subsets, and add the result to each other. 0 and 1 need to be special-cased.
myPrimes <- c(2, 3, 5) mySource <- sample(0:10) # special case 0,1 sel <- mySource < 2 myTarget <- sort(mySource[sel]) mySource <- mySource[!sel] # Iterate over requested primes for (num in myPrimes) { sel <- !as.logical(mySource %% num) myTarget <- c(myTarget, sort(mySource[sel])) mySource <- mySource[!sel] } # Add remaining elements myTarget <- c(myTarget, sort(mySource)) B. > On Mar 31, 2017, at 2:16 PM, Piotr Koller <pittbo...@gmail.com> wrote: > > Hi, I'd like to create a function that will sort values of a vector on a > given basis: > > -zeros > > -ones > > -numbers divisible by 2 > > -numbers divisible by 3 (but not by 2) > > -numbers divisible by 5 (but not by 2 and 3) > > etc. > > I also want to omit zeros in those turns. So when I have a given vector of > c(0:10), I want to receive 0 1 2 4 6 8 10 3 9 5 7 I think it'd be the best > to use some variation of bubble sort, so it'd look like that > > sort <- function(x) { > for (j in (length(x)-1):1) { > for (i in j:(length(x)-1)) { > if (x[i+1]%%divisor==0 && x[i]%%divisor!=0) { > temp <- x[i] > x[i] <- x[i+1] > x[i+1] <- temp > } > } > } > return(x)} > > This function works out well on a given divisor and incresing sequences. > > sort <- function(x) { > for (j in (length(x)-1):1) { > for (i in j:(length(x)-1)) { > if (x[i+1]%%5==0 && x[i]%%5!=0) { > temp <- x[i] > x[i] <- x[i+1] > x[i+1] <- temp > } > } > } > return(x) > } > > x <- c(1:10) > print(x) > print(bubblesort(x)) > > This function does its job. It moves values divisible by 5 on the > beginning. The question is how to increase divisor every "round" ? > > Thanks for any kind of help > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.