[R] Na/NaN error in subsampling script

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Wed Feb 12 02:38:02 CET 2003


Nick Bond wrote:
 > R-help readers,
 >
 > I'm having a problem with an R script (see below), which regularly 
generates the error message,
 >
 > Error in start:(start + (sample.length - 1)) :
 >         NA/NaN argument
 >
 > , for which I am unsure of the cause.
 >
 > In essence, the script (below) generates the start and end points for 
random subsamples from along a vector (in reality a transect (of a given 
length, sample.length), that may be used to subsample from another 
vector of data.  The important point is that once a section of the 
transect has
 > been sampled, it cannot be resampled by an overlapping sub-transect. 
  WHile there are obvious limits on the number of non-overlapping 
subvectors that can be
 > taken from the original vector, I don't think this is the source of 
the error message, although the error is increasingly common as more of 
hte original vector is sampled.
 > Any help would be greatly appreciated.
 > regards
 > Nick
 >
 > r1<-function(transect.length,sample.length,reps) {   #Input: transect 
length, subsample length No.subsamples (reps).
 > x<-c(1:transect.length)     #create transect, x, of required length.
 > subsamples<-mat.or.vec(reps,2)    #create matrix for output of 
subsampled start and end points.
 > for(i in 1:reps) {     #start loop for reps.
 > start<-ceiling(runif(1,0,(transect.length-sample.length))) 
#generate initial random start point.
 > while (any(x[start:(start+(sample.length-1))])=="NA")

If x is numeric then you should use is.na to test for missing values:

while(any(is.na(x[start:(start+(sample.length-1))])))

 > subsamples[i,1]<-start     #store start point in ouput matrix
 > subsamples[i,2]<-(start+(sample.length-1))  #store end point in 
output matrix
 > x[start:(start+(sample.length-1))]<-NA   #convert sampled points to 
NA, for detection within the while loop above.
 > }
 > return(x,subsamples)     #return output.
 > }
 >
 > I would typically run the script with an input such as r1(1000,50,10)
 >

I didn't run this so I'm not sure if my suggestion is the only problem 
with the script.

Regards,
Sundar




More information about the R-help mailing list