Hi your construction is quite complicated so instead of refining it I tried to do such task different way. If I understand what you want to do you can use
> set.seed(1) > T <- matrix(trunc(runif(20)*10), nrow=10, ncol=2) > T [,1] [,2] [1,] 2 2 [2,] 3 1 [3,] 5 6 [4,] 9 3 [5,] 2 7 [6,] 8 4 [7,] 9 7 [8,] 6 9 [9,] 6 3 [10,] 0 7 > m<-table(T) # matrix is vector with dimensions > todel<-rowSums(T==as.numeric(names(which.max(m))))>0 # check which element of matrix is the first frequent > T[todel,] [,1] [,2] [1,] 2 2 [2,] 2 7 > T[!todel,] [,1] [,2] [1,] 3 1 [2,] 5 6 [3,] 9 3 [4,] 8 4 [5,] 9 7 [6,] 6 9 [7,] 6 3 [8,] 0 7 You can put all of these to cycle but you have to decide when to end the cycle. Regards Petr [EMAIL PROTECTED] [EMAIL PROTECTED] napsal dne 08.08.2007 15:33:58: > Dear experts, > > I have a 10x2 matrix T containing random integers. I would like to delete > pairs (rows) iteratively, which contain the most frequent element either in > the first or second column: > > > T <- matrix(trunc(runif(20)*10), nrow=10, ncol=2) > > G <- matrix(0, nrow=6, ncol=2) > > for (i in (1:6)){ > print("****************** Start iteration " ~i~ " *******************") > print("Current matrix:") > print(T) > > m <- append(T[,1], T[,2]) > > print("Concatenated columns:") > print(m) > > > # build frequency table > F <- data.matrix(as.data.frame(table(m))) > > dimnames(F)<-NULL > > # pick up the most frequent element: sort decreasing and take is from the top > F <- F[order(F[,2], decreasing=TRUE),] > > print("Freq. table:") > print(F[1:5,]) > > todel <- F[1,1] #rows containing the most frequent element will be deleted > G[i,1] <- todel > G[i,2] <- F[1,2] > > print("todel="~todel) > > # eliminate rows containing the most frequent element > # either the first or the second column contains this element > id <- which(T[,1]==todel) > print("Indexes of rows to be deleted:") > print(id) > if (length(id)>0){ > T <- T[-1*id, ] > } > > id <- which(T[,2]==todel) > print("Indexes of rows to be deleted:") > print(id) > if (length(id)>0){ > T <- T[-1*id, ] > } > > print("nrow(T)="~nrow(T)) > > } > > print("Result matrix:") > print(G) > > The output of the first two iterations looks like as follows. As one can see, > the frequency table in the second iteration still contains the element deleted > in the first iteration! Is this a bug or what am I doing here wrong? > Any help greatly appreciated! > > [1] "****************** Start iteration 1 *******************" > [1] "Current matrix:" > [,1] [,2] > [1,] 2 2 > [2,] 6 7 > [3,] 9 9 > [4,] 3 5 > [5,] 4 0 > [6,] 7 9 > [7,] 5 7 > [8,] 1 7 > [9,] 9 6 > [10,] 3 3 > [1] "Concatenated columns:" > [1] 2 6 9 3 4 7 5 1 9 3 2 7 9 5 0 9 7 7 6 3 > [1] "Freq. table:" > [,1] [,2] > [1,] 8 4 > [2,] 9 4 > [3,] 4 3 > [4,] 3 2 > [5,] 6 2 > [1] "todel=8" > [1] "Indexes of rows to be deleted:" > integer(0) > [1] "Indexes of rows to be deleted:" > integer(0) > [1] "nrow(T)=10" > [1] "****************** Start iteration 2 *******************" > [1] "Current matrix:" > [,1] [,2] > [1,] 2 2 > [2,] 6 7 > [3,] 9 9 > [4,] 3 5 > [5,] 4 0 > [6,] 7 9 > [7,] 5 7 > [8,] 1 7 > [9,] 9 6 > [10,] 3 3 > [1] "Concatenated columns:" > [1] 2 6 9 3 4 7 5 1 9 3 2 7 9 5 0 9 7 7 6 3 > [1] "Freq. table:" > [,1] [,2] > [1,] 8 4 > [2,] 9 4 > [3,] 4 3 > [4,] 3 2 > [5,] 6 2 > [1] "todel=8" > [1] "Indexes of rows to be deleted:" > integer(0) > [1] "Indexes of rows to be deleted:" > integer(0) > [1] "nrow(T)=10" > [1] "****************** Start iteration 3 *******************" > [1] "Current matrix:" > ... > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > 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@stat.math.ethz.ch mailing list 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.