楼主: 地鼠头目
1343 2

[问答] APPLY函数出BUG了,悬赏求大神解答 [推广有奖]

  • 0关注
  • 0粉丝

学前班

90%

还不是VIP/贵宾

-

威望
0
论坛币
853 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
33 点
帖子
2
精华
0
在线时间
4 小时
注册时间
2016-10-10
最后登录
2022-5-3

楼主
地鼠头目 发表于 2017-9-15 00:54:13 |AI写论文
50论坛币
事情起因是我希望写一个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)


。有些怀疑人生,万能的贴吧大神,请问问题出在哪里???

最佳答案

jiangbeilu 查看完整内容

这个问题不在于apply,而是你用了ifelse 抽象出来,就是这个样子: grepl是正确的,但是因为只有一次判定,所以你希望它返回1:2这一个向量,然而实际上,只给你一个1。 这种方式,你可以if做一次判定,而不是用ifelse。
关键词:apply函数 apply appl bug App
已有 1 人评分论坛币 收起 理由
jiangbeilu + 5 很好的问题,关键是要找对点。

总评分: 论坛币 + 5   查看全部评分

沙发
jiangbeilu 学生认证  发表于 2017-9-15 00:54:14
这个问题不在于apply,而是你用了ifelse
抽象出来,就是这个样子:
  1. ifelse(grepl("we",'we are')==1,1:2,0)
复制代码

grepl是正确的,但是因为只有一次判定,所以你希望它返回1:2这一个向量,然而实际上,只给你一个1。
这种方式,你可以if做一次判定,而不是用ifelse。

藤椅
地鼠头目 发表于 2017-9-26 12:24:27
jiangbeilu 发表于 2017-9-15 00:54
这个问题不在于apply,而是你用了ifelse
抽象出来,就是这个样子:
最近比较忙没及时回复,真诚感谢你的回答。原来是版主亲自回帖呀,能耐心把问题看完,荣幸之至。我之前把ifelse和if混为一谈了,还好及时发现,要不不知道会在工作中发生多少错误。版主辛苦,祝工作顺利

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-6 03:55