[R] OK - I got the data - now what? :-)

Mark Knecht markknecht at gmail.com
Sun Jul 5 18:19:24 CEST 2009


On Sun, Jul 5, 2009 at 8:18 AM, David Winsemius<dwinsemius at comcast.net> wrote:
>
> On Jul 5, 2009, at 10:50 AM, Uwe Ligges wrote:
>
>>
>>
>> David Winsemius wrote:
>>>
>>> So if your values are calculated from other values then consider using
>>> all.equal()
>>> And repeated applications of the testing criteria process are effective:
>>> test[3,][which(names(test)=="C1"):(which(test[3,] == 0.0)-1)]
>>>   C1   C2   C3
>>> 3 0.52 0.66 0.51
>>> (and a warning that does not seem accurate to me.)
>>> In which(names(test) == "C1"):(which(test[3, ] == 0) - 1) :
>>>  numerical expression has 3 elements: only the first used
>>
>>
>> David,
>>
>> # which(test[3,] == 0.0)
>> [1] 6 7 8
>>
>> and in a:b a and b must be length 1 vectors (scalars) otherwise just the
>> first element (in this case 6) is used.
>>
>> That leads us to the conclusion that writing the line above is not really
>> the cleanest way or you intended something different ....
>
> Thanks, Uwe. I see my confusion. I did want 6 to be used  and it looks as
> though I would not be getting in truouble this way, but a cleaner method
> would be to access only the first element of which(test[3, ] == 0):
>
> test[3,][ which(names(test) == "C1") : (which(test[3,] == 0.0)[1]-1) ]
>
>>
>> David
>
>>> Seems to me that all of the element were used. I cannot explain that
>>> warning but am pretty sure it can be ignored.
>>>
>
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT
>
>

OK - making lots more headway. Thanks for your help.

QUESTION: How do I handle the case where I'm testing for 0 and don't
find it? In this case I need to all of the row from C1:C6.

test <- data.frame(A=1:10, B=100, C1=runif(10), C2=runif(10),
C3=runif(10), C4=runif(10), C5=runif(10), C6=runif(10))
test<-round(test,2)

#Make array ragged
test$C3[2]<-0;test$C4[2]<-0;test$C5[2]<-0;test$C6[2]<-0
test$C4[3]<-0;test$C5[3]<-0;test$C6[3]<-0
test$C6[7]<-0
test$C4[8]<-0;test$C5[8]<-0;test$C6[8]<-0

test

#C1 always the same so calculate it only once
StartCol <- which(names(test)=="C1")

#Print row 3 explicitly
test[3,][StartCol :(which(test[3,] == 0.0)[1]-1)]

#Row 6 fails because 0 is not found
test[6,][StartCol :(which(test[6,] == 0.0)[1]-1)]

EndCol <- which(test[6,] == 0.0)[1]-1
EndCol

Thanks,
Mark




More information about the R-help mailing list