Thanks, Michael! You have an heart of gold! Appreciated!
On Mon, Aug 22, 2011 at 10:53 AM, R. Michael Weylandt < michael.weyla...@gmail.com> wrote: > The different lengths work because R recycles values whenever you try to do > a binary operation on things of different lengths: in essence, R copies 10 > however many times needed to make something that has the right length for an > elementwise comparison with x.** > > If you did something like > > x != c(1,10) > > R would make a recycled-copy that looks like 1,10,1,10,1,10, etc. and > compare that to x, in essence, checking half the values against 1 and half > against 10. > > Similarly, you can use vectors of totally different lengths and R will > simply repeat the shorter one to the right length: > > e.g., > > (1:10) > (1:3) > > this plays out as > > c(1,2,3,4,5,6,7,8,9,10) > c(1,2,3,1,2,3,1,2,3) > > but gives you a warning message that the two vectors don't "fit" correctly. > This message never comes up when one side is only a scalar because it can > always fit exactly. > > You can see a surprising example of this at work with > > (-5:5) > (-2 : 7) > > which returns all FALSE values except for the last term, when 5 gets > compared to a recycled -2 > > When R makes this comparison, it creates a vector of logicals (TRUE and > FALSE values) and then the any() command tells us if there is at least 1 > TRUE, which signals to us to keep the row. > > Michael > > ** I'm not actually sure if that's how the code is implemented for the > scalar case, but it's probably easiest to think of it this way to get the > intuition for larger cases. > > PS -- Is your data guaranteed to be an integer? If you have floating point > data, it's good practice to use something more like > > abs(x - 10) > 1e-8 > > rather than x != 0 in your code. If you need to use this formulation, just > put it inside the any() statement. > > On Mon, Aug 22, 2011 at 1:43 PM, Changbin Du <changb...@gmail.com> wrote: > >> HI, Michael, >> >> Sorry for my numb, I have one more question. >> >> When you use function(x){any (x != 10), here x is a vector, x!=10 will >> give a vector of logical value, right? >> >> If it is, how can vector be compared to a scale, 10 in this case? >> >> Thanks! >> >> >> >> >> >> On Mon, Aug 22, 2011 at 10:16 AM, R. Michael Weylandt < >> michael.weyla...@gmail.com> wrote: >> >>> This isn't the most beautiful code, but I think it should work for you: >>> >>> # Some sample data >>> M = >>> cbind(matrix(rnorm(10),ncol=2),matrix(sample(c(10,1),15,replace=T),ncol=3)) >>> colnames(M) = c("Thing1","Thing2",paste("array",1:3,sep="")) >>> >>> colsToCheck = grepl("array",colnames(M)) # Isolate the "array" columns >>> rowsToKeep = apply(M[,colsToCheck],1,function(x){any (x != 10)}) >>> # apply the test function row-wise to get a logical vector of which rows >>> to keep >>> >>> Answer = M[rowsToKeep,] # keep only those rows >>> >>> Hope this helps, >>> >>> Michael >>> >>> >>> On Mon, Aug 22, 2011 at 12:56 PM, Changbin Du <changb...@gmail.com>wrote: >>> >>>> HI, Michael, >>>> >>>> What I want to do is remove all the rows, for which array1, array2, >>>> ..array15 are all equal to 10. >>>> >>>> I want to keep all the rows at least one of the array variables are not >>>> equal to 10. >>>> >>>> sorry for the confusion. >>>> >>>> >>>> >>>> >>>> >>>> On Mon, Aug 22, 2011 at 9:52 AM, R. Michael Weylandt < >>>> michael.weyla...@gmail.com> wrote: >>>> >>>>> "I want to select the array columns that are not equal to 10." is >>>>> ambiguous to me. >>>>> >>>>> Just to clarify, do you want to simply drop the column named array10 or >>>>> do you want to check each column for having one/all 10's as values and >>>>> drop >>>>> based on that test? >>>>> >>>>> Michael >>>>> >>>>> On Mon, Aug 22, 2011 at 12:35 PM, Changbin Du <changb...@gmail.com>wrote: >>>>> >>>>>> Dear R community, >>>>>> >>>>>> I have a data set like the following: >>>>>> >>>>>> probe_name chr_id position array1 array2 array3 array4 array5 array6 >>>>>> array7 >>>>>> 1 C-3AAAA 10 16566949 10 10 10 10 10 >>>>>> 10 >>>>>> 10 >>>>>> 2 C-3AAAB 17 33478940 10 10 10 10 10 >>>>>> 10 >>>>>> 10 >>>>>> 3 C-3AAAC 3 187369224 10 10 2 10 10 1 >>>>>> 10 >>>>>> 4 C-3AAAD 8 28375041 10 10 10 10 10 >>>>>> 10 >>>>>> 10 >>>>>> 5 C-3AAAG 13 99134921 10 10 10 10 10 >>>>>> 10 >>>>>> 10 >>>>>> 6 C-3AAAH 16 31565412 10 10 10 10 10 >>>>>> 10 >>>>>> 10 >>>>>> array8 array9 array10 array11 array12 array13 array14 array15 >>>>>> 1 10 10 10 10 10 10 10 10 >>>>>> 2 10 10 10 10 10 10 10 10 >>>>>> 3 10 10 10 10 10 10 10 10 >>>>>> 4 10 10 10 10 10 10 10 10 >>>>>> 5 10 10 10 10 10 1 10 10 >>>>>> 6 10 10 10 0 10 10 10 10 >>>>>> >>>>>> I want to select the array columns that are not equal to 10. >>>>>> >>>>>> I tried the following codes: >>>>>> >>>>>> head(reduce.final<-final[which(final$array*!=10), ]) # it does not >>>>>> wok, >>>>>> do any one have a smart to do this? >>>>>> >>>>>> Thanks so much! >>>>>> >>>>>> >>>>>> -- >>>>>> Sincerely, >>>>>> Changbin >>>>>> -- >>>>>> >>>>>> [[alternative HTML version deleted]] >>>>>> >>>>>> ______________________________________________ >>>>>> R-help@r-project.org 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. >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Sincerely, >>>> Changbin >>>> -- >>>> >>>> >>> >> >> >> -- >> Sincerely, >> Changbin >> -- >> >> >> > -- Sincerely, Changbin -- Changbin Du Data Analysis Group, Affymetrix Inc 6550 Emeryville, CA, 94608 [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org 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.