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]
}