I am trying to turn this piece of code into an R function
separea=quantile(foo6$area,seq(0,1,0.001),na.rm=T)
nb=length(separea)[1]-1
resultats=matrix(NA,nb,8)
for (count in 1:nb){
  print(c("area: ",separea[count] ))
  b=foo6[foo6$area >= separea[max(1,count-20)] & foo6$area <= separea[min(count+20,nb+1)],]
  q01 = quantile( b$nq , 0.01,na.rm=T)  
  q10 = quantile( b$nq , 0.10,na.rm=T)
  q25 = quantile( b$nq , 0.25,na.rm=T)
  q50 = quantile( b$nq , 0.50,na.rm=T)
  q75 = quantile( b$nq , 0.75,na.rm=T)
  q90 = quantile( b$nq , 0.90,na.rm=T)
  q99 = quantile( b$nq , 0.99,na.rm=T)  
  if(dim(b)[1]>100){
    resultats[count,]=cbind(separea[count],q01,q10,q25,q50,q75,q90,q99)
  }
}
resultats=resultats[!is.na(resultats[,1]),]
dim1=dim(resultats)[1]
And I wrote this function:
quantile.prep<-function(dframe,xvar,yvar){
  separea=quantile(dframe$xvar,seq(0,1,0.001),na.rm=T)
  nb=length(separea)[1]-1
  resultats=matrix(NA,nb,8)
  for (count in 1:nb){
    print(c("area: ",separea[count] ))
    b=dframe[dframe$xvar >= separea[max(1,count-20)] & dframe$area <= separea[min(count+20,nb+1)],]
    q01 = quantile( b$yvar , 0.01,na.rm=T)  
    q10 = quantile( b$yvar , 0.10,na.rm=T)
    q25 = quantile( b$yvar , 0.25,na.rm=T)
    q50 = quantile( b$yvar , 0.50,na.rm=T)
    q75 = quantile( b$yvar , 0.75,na.rm=T)
    q90 = quantile( b$yvar , 0.90,na.rm=T)
    q99 = quantile( b$yvar , 0.99,na.rm=T)  
    if(dim(b)[1]>100){
      resultats[count,]=cbind(separea[count],q01,q10,q25,q50,q75,q90,q99)
    }
  }
  resultats=resultats[!is.na(resultats[,1]),]
  dim1=dim(resultats)[1]
}
But I am getting this error: Error in dframe$xvar : $ operator is invalid for atomic vectors
When I call using quantile.prep(dframe='foo6',xvar='area',yvar='nq')
dput(droplevels(head(foo6)))
structure(list(area = c(162.6513, 162.6513, 162.6513, 162.6513, 
162.6513, 162.6513), nq = c(0.140843018162167, 0.152855833307204, 
0.193245919337872, 0.156860105022216, 0.171658019333384, 0.18628194179819
)), .Names = c("area", "nq"), row.names = c(NA, 6L), class = "data.frame")
Could you please help?
The proposed output
WORKING SOLUTION
quantile.prep<-function(dframe,xvar,yvar){
  separea=quantile(dframe[,xvar],seq(0,1,0.001),na.rm=T)
  nb=length(separea)[1]-1
  resultats=matrix(NA,nb,8)
  for (count in 1:nb){
    print(c("area: ",separea[count] ))
    b=dframe[dframe[,xvar]>= separea[max(1,count-20)] & dframe[,'xvar']<= separea[min(count+20,nb+1)],]
    q01 = quantile( b[,yvar] , 0.01,na.rm=T)  
    q10 = quantile( b[,yvar] , 0.10,na.rm=T)
    q25 = quantile( b[,yvar] , 0.25,na.rm=T)
    q50 = quantile( b[,yvar] , 0.50,na.rm=T)
    q75 = quantile( b[,yvar] , 0.75,na.rm=T)
    q90 = quantile( b[,yvar] , 0.90,na.rm=T)
    q99 = quantile( b[,yvar] , 0.99,na.rm=T)  
    if(dim(b)[1]>100){
      resultats[count,]=cbind(separea[count],q01,q10,q25,q50,q75,q90,q99)
    }
  }
  resultats=resultats[!is.na(resultats[,1]),]
  dim1=dim(resultats)[1]
}
 
    
