Mark, thanks for the suggestions.  Unfortunately that did not fix the problem.  
I have experimented (with no success) with placing braces in different 
locations around the if/else statements and removing them all together.

 

     Thanks again,

                 Aaron
 


Date: Wed, 22 Apr 2009 15:24:24 -0500
From: markle...@verizon.net
To: awell...@hotmail.com
Subject: Re: [R] function output with for loop and if statement

Hi Aaron: i just looked quickly because I have to go but try wrapping braces 
around the last if else like
below and see if that helps. if you have multiple statements in an if else, i 
think you need them
so I'm actually a little surpised that your function didn't give messages when 
you tried to run it ?

Also, braces in R can have some strange behavior ( because , if code is run at 
the prompt, and a statement can complete and there's no brace on that line then 
that statement is executed regardless f there's a brace later. that probably 
doesn't make much sense but it's kind of hard to explain  ) but I'm hoping that 
below fixes the problem. good luck.


function ( ) { # brace for beginning of function

.....
.....
.....


if (table(names(tmp.out))[i]==1) {
   tmp.match2<-names(tmp.out.sort)[names(tmp.out.sort)==i]
   tmp.col2<-match(tmp.match2,names(tmp.out.sort))
   tmp.out.sort[1:nrow(test.veg),tmp.col2]<-test.veg[,names(test.veg)==i]
   return(tmp.out.sort) 
   } else {
   return(tmp.out.sort)
   }

} # brace for end of function 





On Apr 22, 2009, aaron wells <awell...@hotmail.com> wrote: 



Hello all, turns out i'm having a bad R week. I am at my wits end with a 
function that I am trying to write. When I run the lines of code outside of a 
function, I get the desired output. When I wrap the lines of code into a 
function it doesn't work as expected. Not sure what is going on here. I 
suspected that the syntax of the if statement with the for loop was the 
culprit, but when I only ran the part of the code with the for loop with no if 
statement I still had the above problem (works outside function, fails when 
wrapped into a function). Below is the code and example output. Please help! 



Thanks, 

Aaron



concov.test<-function(vegetation,specieslist)
{
test.veg<-vegetation
names(test.veg)<-specieslist$LifeForm
tmp<-matrix(nrow=nrow(test.veg),ncol=length(unique(names(test.veg))))
for (i in unique(names(test.veg))) 
{test.out<-apply(test.veg[,names(test.veg)==i],1,sum)
tmp.match<-unique(names(test.veg))[unique(names(test.veg))==i]
tmp.col<-match(tmp.match,unique(names(test.veg)))
tmp[1:nrow(test.veg),tmp.col]<-test.out
tmp.out<-data.frame(row.names(test.veg),tmp,row.names=1);names(tmp.out)<-unique(names(test.veg))
tmp.out
tmp.out.sort<-tmp.out[,order(names(tmp.out))]
}
if(table(names(tmp.out))[i]==1)
tmp.match2<-names(tmp.out.sort)[names(tmp.out.sort)==i]
tmp.col2<-match(tmp.match2,names(tmp.out.sort))
tmp.out.sort[1:nrow(test.veg),tmp.col2]<-test.veg[,names(test.veg)==i]
return(tmp.out.sort)
else return(tmp.out.sort)
}



----Incorrect output when run as function-----



> test<-concov.test(ansveg_all,spplist.class)
> test
Bare_Ground Deciduous_Shrubs Deciduous_Tree Evergreen_Shrubs Evergreen_Tree 
Forbs Grasses Lichens Mosses Sedges
ANSG_T01_01_2008 NA NA NA NA NA NA NA NA 95.0 NA
ANSG_T01_02_2008 NA NA NA NA NA NA NA NA 16.0 NA
ANSG_T01_03_2008 NA NA NA NA NA NA NA NA 71.0 NA
ANSG_T01_04_2008 NA NA NA NA NA NA NA NA 10.0 NA
ANSG_T02_01_2008 NA NA NA NA NA NA NA NA 92.2 NA
ANSG_T02_02_2008 NA NA NA NA NA NA NA NA 14.0 NA

.

.

.



----Correct output when code is run outside of a function----



> test.veg<-ansveg_all
> names(test.veg)<-spplist.class$LifeForm
> tmp<-matrix(nrow=nrow(test.veg),ncol=length(unique(names(test.veg))))
> 
> for (i in unique(names(test.veg))) 
> {test.out<-apply(test.veg[,names(test.veg)==i],1,sum)
+ tmp.match<-unique(names(test.veg))[unique(names(test.veg))==i]
+ tmp.col<-match(tmp.match,unique(names(test.veg)))
+ tmp[1:nrow(test.veg),tmp.col]<-test.out
+ 
tmp.out<-data.frame(row.names(test.veg),tmp,row.names=1);names(tmp.out)<-unique(names(test.veg))
+ tmp.out
+ tmp.out.sort<-tmp.out[,order(names(tmp.out))]
+ }
> if(table(names(tmp.out))[i]==1)
+ tmp.match2<-names(tmp.out.sort)[names(tmp.out.sort)==i]
> tmp.col2<-match(tmp.match2,names(tmp.out.sort))
> tmp.out.sort[1:nrow(test.veg),tmp.col2]<-test.veg[,names(test.veg)==i]
> return(tmp.out.sort)
> else return(tmp.out.sort)
> 
> 
> tmp.out.sort
Bare_Ground Deciduous_Shrubs Deciduous_Tree Evergreen_Shrubs Evergreen_Tree 
Forbs Grasses Lichens Mosses Sedges
ANSG_T01_01_2008 0 57.0 1.0 40.0 35.0 22.0 5.0 35.0 95.0 1.1
ANSG_T01_02_2008 0 0.0 0.0 0.0 0.0 34.0 0.0 0.0 16.0 24.0
ANSG_T01_03_2008 0 31.0 0.0 47.0 1.0 9.1 3.0 3.0 71.0 14.0
ANSG_T01_04_2008 0 0.0 0.0 12.0 0.0 13.2 0.0 0.0 10.0 16.0
ANSG_T02_01_2008 0 15.0 1.0 22.0 36.0 9.2 2.0 38.0 92.2 0.1
ANSG_T02_02_2008 0 33.0 66.0 23.0 2.0 5.0 0.0 3.0 14.0 0.0
.

.

.


_________________________________________________________________
Rediscover HotmailĀ®: Get quick friend updates right in your inbox. 

Updates2_042009
[[alternative HTML version deleted]]





______________________________________________
R-help@r-project.org mailing list

PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

_________________________________________________________________
Rediscover HotmailĀ®: Now available on your iPhone or BlackBerry

Mobile2_042009
        [[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.

Reply via email to