我試圖把這段代碼到一個R的功能爲什麼我的一個R函數拋出一個錯誤
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]
我寫了這個功能:
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]
}
但我得到這個錯誤:錯誤DFRAME $ XVAR:$操作者爲原子矢量
無效當我打電話使用quantile.prep(DFRAME ='富6' ,XVAR = '區域',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")
能否請你幫忙嗎?
提出的輸出
工作液
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]
}
千萬不要錯過你的data.frame作爲一個字符串:'quantile.prep(DFRAME = foo6,XVAR = '區域',yvar = 'NQ')'和你不能對字符串使用「$」,使用標準索引「[,]」。 (我總是忘記這個規範的副本) – MrFlick
@MrFlick [This](http://stackoverflow.com/q/2641653/324364)是目前我能找到的最接近的。 – joran
你能用文字解釋你的代碼的目的嗎?我認爲可能有更簡單的方法來編碼,但我不確定你想要做什麼。 – kdauria