[R] Help with code

William Dunlap wdunlap at tibco.com
Tue Dec 20 22:01:06 CET 2011


Re
> your column (i think its called t1d_ptype[1:25]) is a factor and using
> factors is dangerous at best.

This depends on how you want to define "dangerous".  If t1d_ptype ought
take values from a certain set of strings then making it a factor gives
you some safety, since it warns you when you go outside of that set and
try to give it an illegal value.  E.g.,
    > sex <- factor(c("M","F","F"), levels=c("F", "M"))
    > sex[2] <- "no"
    Warning message:
    In `[<-.factor`(`*tmp*`, 2, value = "no") :
      invalid factor level, NAs generated

It does take more work to set up, since you need to enumerate the set
of good strings.  That is tedium, not danger.

If t1d_ptype might take any value, then make it a character vector.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Justin Haynes
> Sent: Tuesday, December 20, 2011 11:54 AM
> To: 1Rnwb
> Cc: r-help at r-project.org
> Subject: Re: [R] Help with code
> 
> the short answer... which is a guess cause you didn't provide a
> reproducible example... is:
> 
> your column (i think its called t1d_ptype[1:25]) is a factor and using
> factors is dangerous at best.
> 
> you can check with ?str.
> 
> see ?factor for how to convert back to strings and see if your code works.
> 
> 
> 
> to answer your second question, yes I'm sure there is a better simple way
> to do this, but i can't follow what you're doing... for example, I don't
> know what c1 is...
> 
> but, the place I would look is at the plyr package.  its excellent at
> splitting and reordering data.
> 
> 
> and one final note, you should avoid naming things with pre-existing R
> functions (e.g. data).
> 
> Justin
> 
> 
> On Tue, Dec 20, 2011 at 11:14 AM, 1Rnwb <sbpurohit at gmail.com> wrote:
> 
> > hello gurus,
> >
> > i have a data frame like this
> >   HTN HTN_FDR Dyslipidemia CAD t1d_ptype[1:25]
> > 1    Y       Y            Y                 T1D
> > 2                                           T1D
> > 3                                      Ctrl_FDR
> > 4                                           T1D
> > 5            Y                             Ctrl
> > 6                                          Ctrl
> > 7                                      Ctrl_FDR
> > 8                                           T1D
> > 9            Y            Y                 T1D
> > 10                                          T1D
> > 11                                     Ctrl_FDR
> > 12           Y            Y                 T1D
> > 13   Y       Y            Y                 T1D
> > 14                                          T1D
> > 15                                         Ctrl
> > 16                                         Ctrl
> > 17                                     Ctrl_FDR
> > 18                                          T1D
> > 19                                          T1D
> > 20           Y                              T1D
> > 21                                     Ctrl_FDR
> > 22                                     Ctrl_FDR
> > 23                                         Ctrl
> > 24                                         Ctrl
> > 25                                          T1D
> >
> > i am converting it to define the groups more uniformly using this code:
> >
> > for( i in 1:dim(c1)[1])
> > {
> >  num_comp<-0
> >  for (j in 1:dim(c1)[2])
> >     if (c1[i,j]==2) num_comp=num_comp+1      #"Y"=2
> >  for (j in 1:dim(c1)[2])
> >    if(num_comp>0)
> >    {
> >          if (data$t1d_ptype[i] == "T1D" && c1[i ,j] == 2) c2[i,j]<-"T1D_w"
> >        if (data$t1d_ptype[i] == "T1D" && c1[i, j] == 1)  c2[i,j]<-"T1D_oc"
> >        if(substr(data$t1d_ptype[i],1,4) == "Ctrl" && c1[i,j] == 2)
> > c2[i,j]<-"Ctrl_w"
> >        if (substr(data$t1d_ptype[i],1,4) == "Ctrl" && c1[i,j] == 1)
> > c2[i,j]<-"Ctrl_oc"
> >      }
> >      else
> >       {
> >            if(data$t1d_ptype[i] == "T1D") c2[i,j]<-"T1D_noc"
> >            if(substr(data$t1d_ptype[i],1,4) == "Ctrl") c2[i,j]<-"Ctrl_noc"
> >       }
> > }
> >
> > it is giving me error
> > In `[<-.factor`(`*tmp*`, iseq, value = structure(c(NA,  ... :
> >  invalid factor level, NAs generated
> >
> > Also it there a simple way to do this.
> > Thanks
> > Sharad
> >
> > --
> > View this message in context:
> > http://r.789695.n4.nabble.com/Help-with-code-tp4218989p4218989.html
> > Sent from the R help mailing list archive at Nabble.com.
> >
> > ______________________________________________
> > R-help at 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.
> >
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list