[R] Loop stopping after 1 iteration

David Winsemius dwinsemius at comcast.net
Wed May 18 17:36:28 CEST 2011


On May 18, 2011, at 11:18 AM, armstrwa wrote:

> Hi all,
>
> This is a very basic question, but I just can't figure out why R is  
> handling
> a loop I'm writing the way it is.
>
> Here is the script I have written:
>
> grid_2_series<-function(gage_handle,data_type,filename)
>
> series_name<-paste(gage_handle,data_type,sep="_")
> data_grid<-read.table(file=paste(filename,".txt",sep=""))
>
> num_rows_data<-nrow(data_grid)-1
> num_cols_data<-ncol(data_grid)-4
> num_obs<-num_rows_data*num_cols_data
>
> time_series<-matrix(nrow=0,ncol=2)
>
> for(i in 1:length(num_obs)){
> 	rownum<-ceiling(i/31)+1
> 	colnum<-if(i%%31==0){
> 			35
> 		}else{
> 			(i%%31)+4
> 		}
> 	year<-data_grid[rownum,2]
> 	month<-data_grid[rownum,3]
> 	day<-colnum-4
> 	date_string<-paste(month,day,year,sep="/")
> 	date<-as.Date(date_string,format='%m/%d/%Y')
> 	value<-as.character(data_grid[rownum,colnum])
> 	time_series<-rbind(time_series,c(date,value))
> }
>
> The script is working as I intended it to (goes through a matrix of  
> data
> where column 2 is the year, column 3 is the month, and row 1 columns  
> 5-35
> are the day of the month the observation was recorded [I have  
> included a
> screenshot below to help visualize what I'm talking about] and  
> converts the
> grid into a 2 column time series where column 1 is the date and  
> column 2 is
> the value of the observation), but it is stopping after only 1  
> iteration.

The jpg file will not be seen by most readers of this list.

>
> nabble_img src="matrix_screenshot.jpg" border="0"/>
>
> Two questions:
>
> 1.) Does anyone know of an existing function to accomplish this task?

Since you have only define the task in terms of a loop this is not  
working properly and a picture that is not attached and included no  
test data, I have only a vague understanding of the task. Perhaps you  
want stack or melt from the reshape2 package. You might consider  
explaining more completely what you want in natural language. (And  
reading the Posting Guide with attention to acceptable attachment  
formats.)

> 2.) Why is the loop stopping after 1 iteration?  I have it written to
> iterate up to the total number of observations (20,615 in one case).

Most likely is your misunderstanding of how length is being  
interpreted for a vector. You probably want 1:nobs rather than  
1:length(nobs) .... since length(nobs) most probably 1 in this case.
>
> Thank you for your help and sorry for this question which I'm sure  
> has a
> very simple answer.


David Winsemius, MD
Heritage Laboratories
West Hartford, CT



More information about the R-help mailing list