事情起因是我希望写一个Summary函数,用来统计一个dataframe里每列数的均值、标准差、2分位数、4分位数等,再统一输出到df表里,代码如下:
getSummary<-function(dataframe,scope){
dataframe<-as.data.frame(dataframe)
df<-data.frame(matrix(numeric(),ncol(dataframe),length(scope)+1,dimnames=list(c(),c("Indexname",scope))))
df$Indexname<-names(dataframe)
for(i in 1:length(scope)){
df[,i+1]<-switch(scope
,
Mean=apply(dataframe,2,function(x){mean(x,na.rm=TRUE)}),
SD=apply(dataframe,2,function(x){sd(x,na.rm=TRUE)}),
ifelse(grep("Quantile",scope)==1,
apply(dataframe,2,function(x){quantile(x,as.numeric(gsub("[^0-9]","",scope))/100,na.rm=TRUE)})
,NA)
)
}
return(df)
}
scope <- c("Mean", "SD", "X20Quantile","X40Quantile","X60Quantile","X80Quantile")
dSFA<-getSummary(dataframe,scope)
然而,最后的结果却出现,dataframe每列数的2、4、6、8分位数都是一样的,即都等于dataframe第一列的2、4、6、8分位数如截图
27 分钟前 上传
下载附件 (22.63 KB)
。而如果我把代码简单化,改成X20Quantile= apply(dataframe,2,function(x){quantile(x,as.numeric(gsub("[^0-9]","",scope))/100,na.rm=TRUE)}),结果是对的如截图
18 分钟前 上传
下载附件 (8.62 KB)
。有些怀疑人生,万能的贴吧大神,请问问题出在哪里???