michael_karsh at earthlink.net
2009-Nov-04 07:50 UTC
[Rd] Cannot Change Function (PR#14041)
Full_Name: Michael Aaron Karsh Version: 2.8.0 OS: Windows XP Submission from: (NULL) (75.61.102.255) Whenever I try changing a function, it keeps coming up with the same error message. I have the function CN_state_log_sum=function(Tot_log_sum){ #estimate copy number state for the log sum approach if(((Im(Tot_log_sum))!=0)|Re(Tot_log_sum)<=log(1/4)/log(2)) {return(0)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(1/4)/log(2))&&((Re(Tot_log_sum))<log(3/4)/log(2))) {return(1)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>(log(3/4)/log(2)))&&((Re(Tot_log_sum))<log(5/4)/log(2))) {return(2)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(5/4)/log(2))&&((Re(Tot_log_sum))<log(7/4)/log(2))) {return(3)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(7/4)/log(2))) {return(4)} } When I try to run it in the loop: for (j in 1:length(BB_mean_ref)){ # find copy number states (0 for homozygous deletion, 1 for hemizygous deletion, 2 for neutral, 3 for single amplification, 4 for multiple amplification) state_log_sum[j]=CN_state_log_sum(Tot_log_sum[j]) state_sum_log[j]=CN_state_sum_log(Tot_sum_log[j]) } I get the error message: Error in Im(Tot_sum_log) != 0 || Re(Tot_sum_log) <- 2 : could not find function "||<-" Originally, I had defined the function: CN_state_log_sum=function(Tot_log_sum){ #estimate copy number state for the log sum approach if(Im(Tot_log_sum)!=0||Re(Tot_log_sum)<-2) return(0) if(Im(Tot_log_sum)==0&&Re(Tot_log_sum)>-2)&&Re(Tot_log_sum)<-.4150375) return(1) if(Im(Tot_log_sum)==0&&Re(Tot_log_sum)>-.4150375&&Re(Tot_log_sum)<.3219281) return(2) if(Im(Tot_log_sum)==0&&Re(Tot_log_sum)>.3219281&&Re(Tot_log_sum)<.807355) return(3) if(Im(Tot_log_sum)==0&&Re(Tot_log_sum)>.807355) return(4) } When I tried: for (j in 1:length(BB_mean_ref)){ # find copy number states (0 for homozygous deletion, 1 for hemizygous deletion, 2 for neutral, 3 for single amplification, 4 for multiple amplification) state_log_sum[j]=CN_state_log_sum(Tot_log_sum[j]) state_sum_log[j]=CN_state_sum_log(Tot_sum_log[j]) } I get the error message: Error in Im(Tot_sum_log) != 0 || Re(Tot_sum_log) <- 2 : could not find function "||<-" I then tried changing the function to: CN_state_log_sum=function(Tot_log_sum){ #estimate copy number state for the log sum approach if((Im(Tot_log_sum)!=0)||(Re(Tot_log_sum)<-2)) return(0) if((Im(Tot_log_sum)==0)&&(Re(Tot_log_sum)>-2))&&(Re(Tot_log_sum)<-.4150375)) return(1) if((Im(Tot_log_sum)==0)&&(Re(Tot_log_sum)>-.4150375)&&(Re(Tot_log_sum)<.3219281)) return(2) if((Im(Tot_log_sum)==0)&&(Re(Tot_log_sum)>.3219281)&&(Re(Tot_log_sum)<.807355)) return(3) if((Im(Tot_log_sum)==0)&&(Re(Tot_log_sum)>.807355)) return(4) } I got the same error message. I then remembered that <- is used to make assignments, when what I wanted to do was compare one expression to a negative number. I then tried changing the function to: CN_state_log_sum=function(Tot_log_sum){ #estimate copy number state for the log sum approach if(((Im(Tot_log_sum))!=0)|Re(Tot_log_sum)<=log(1/4)/log(2)) {return(0)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(1/4)/log(2))&&((Re(Tot_log_sum))<log(3/4)/log(2))) {return(1)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>(log(3/4)/log(2)))&&((Re(Tot_log_sum))<log(5/4)/log(2))) {return(2)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(5/4)/log(2))&&((Re(Tot_log_sum))<log(7/4)/log(2))) {return(3)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(7/4)/log(2))) {return(4)} } I got the same error message. I then tried removing the function using the command: rm(CN_state_log_sum) and then putting in the function again: CN_state_log_sum=function(Tot_log_sum){ #estimate copy number state for the log sum approach if(((Im(Tot_log_sum))!=0)|Re(Tot_log_sum)<=log(1/4)/log(2)) {return(0)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(1/4)/log(2))&&((Re(Tot_log_sum))<log(3/4)/log(2))) {return(1)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>(log(3/4)/log(2)))&&((Re(Tot_log_sum))<log(5/4)/log(2))) {return(2)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(5/4)/log(2))&&((Re(Tot_log_sum))<log(7/4)/log(2))) {return(3)} if(((Im(Tot_log_sum))==0)&&((Re(Tot_log_sum))>log(7/4)/log(2))) {return(4)} } Same error message. I tried removing the function again, and then tried saving the new workspace and the workspace image when I closed R so that it would remember that that function had been removed when I would open R again. I then opened R again and defined the same function again. Again, when I tried running it, I got the same error message.
What makes you think this is a bug in R?> Whenever I try changing a function, it keeps coming up with the same > error > message. > > I have the function > CN_state_log_sum=function(Tot_log_sum){ #estimate copy number state > for the log[...]> } > > When I try to run it in the loop: > for (j in 1:length(BB_mean_ref)){ # find copy number states (0 for > homozygous > deletion, 1 for hemizygous deletion, 2 for neutral, 3 for single > amplification, > 4 for multiple amplification) > state_log_sum[j]=CN_state_log_sum(Tot_log_sum[j]) > state_sum_log[j]=CN_state_sum_log(Tot_sum_log[j]) > } > I get the error message: > Error in Im(Tot_sum_log) != 0 || Re(Tot_sum_log) <- 2 : > could not find function "||<-"The error message indicates that the problem happens in the function CN_state_sum_log() rather than CN_state_log_sum(), so it's hardly surprising that changing the latter doesn't have any effect. My guess: you've go a condition (Re(Tot_sum_log)<-2), which is mistaken for the assignment operator "<-" by the R parser. Adding some whitespace (Re(Tot_sum_log) < -2) should help both R and human readers to make sense of it. Best, Stefan
> -----Original Message----- > From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r- > project.org] On Behalf Of Stefan Evert > Sent: Wednesday, November 04, 2009 4:40 AM > To: michael_karsh at earthlink.net > Cc: R-bugs at r-project.org; r-devel at stat.math.ethz.ch > Subject: Re: [Rd] Cannot Change Function (PR#14041) > > What makes you think this is a bug in R? > > > Whenever I try changing a function, it keeps coming up with the same > > error > > message. > > > > I have the function > > CN_state_log_sum=function(Tot_log_sum){ #estimate copy number state > > for the log > [...] > > } > > > > When I try to run it in the loop: > > for (j in 1:length(BB_mean_ref)){ # find copy number states (0 for > > homozygous > > deletion, 1 for hemizygous deletion, 2 for neutral, 3 for single > > amplification, > > 4 for multiple amplification) > > state_log_sum[j]=CN_state_log_sum(Tot_log_sum[j]) > > state_sum_log[j]=CN_state_sum_log(Tot_sum_log[j]) > > } > > I get the error message: > > Error in Im(Tot_sum_log) != 0 || Re(Tot_sum_log) <- 2 : > > could not find function "||<-" > > The error message indicates that the problem happens in the function > CN_state_sum_log() rather than CN_state_log_sum(), so it's hardly > surprising that changing the latter doesn't have any effect. > > My guess: you've go a condition (Re(Tot_sum_log)<-2), which is > mistaken for the assignment operator "<-" by the R parser. Adding some > whitespace (Re(Tot_sum_log) < -2) should help both R and human readers > to make sense of it.Adding parentheses around the negative number is the only way to keep such an expression robustly safe given the various whitespace alterations that happen as such text passes through different parsers, editors, mailers, proportional pitch font displays (which can fool human readers) ... ( ( Im(Tot_sum_log) != 0 ) || ( Re(Tot_sum_log) < (-2) ) ) Best Steven McKinney> > Best, > Stefan > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
> -----Original Message----- > From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r- > project.org] On Behalf Of Stefan Evert > Sent: Wednesday, November 04, 2009 4:40 AM > To: michael_karsh at earthlink.net > Cc: R-bugs at r-project.org; r-devel at stat.math.ethz.ch > Subject: Re: [Rd] Cannot Change Function (PR#14041) >=20 > What makes you think this is a bug in R? >=20 > > Whenever I try changing a function, it keeps coming up with the same > > error > > message. > > > > I have the function > > CN_state_log_sum=3Dfunction(Tot_log_sum){ #estimate copy number state > > for the log > [...] > > } > > > > When I try to run it in the loop: > > for (j in 1:length(BB_mean_ref)){ # find copy number states (0 for > > homozygous > > deletion, 1 for hemizygous deletion, 2 for neutral, 3 for single > > amplification, > > 4 for multiple amplification) > > state_log_sum[j]=3DCN_state_log_sum(Tot_log_sum[j]) > > state_sum_log[j]=3DCN_state_sum_log(Tot_sum_log[j]) > > } > > I get the error message: > > Error in Im(Tot_sum_log) !=3D 0 || Re(Tot_sum_log) <- 2 : > > could not find function "||<-" >=20 > The error message indicates that the problem happens in the function > CN_state_sum_log() rather than CN_state_log_sum(), so it's hardly > surprising that changing the latter doesn't have any effect. >=20 > My guess: you've go a condition (Re(Tot_sum_log)<-2), which is > mistaken for the assignment operator "<-" by the R parser. Adding some > whitespace (Re(Tot_sum_log) < -2) should help both R and human readers > to make sense of it.Adding parentheses around the negative number is the only way to keep such an expression robustly safe given the various whitespace alterations that happen as such text passes through different parsers, editors, mailers, proportional pitch font displays (which can fool human readers) ... ( ( Im(Tot_sum_log) !=3D 0 ) || ( Re(Tot_sum_log) < (-2) ) ) Best Steven McKinney>=20 > Best, > Stefan >=20 > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel