用R中的for循环覆盖结果

时间:2016-02-06 16:38:30

标签: r

我有许多csv文件,我的目标是找到id参数给出的文件或文件集的完整案例数。我的函数应返回一个数据框,其中列id指定文件,列obs给出该id的完整个案数。但是,我的函数会覆盖每个循环中nobs的先前值,结果数据框只给出了它的最后一个值。您是否知道如何获取每个id值的nobs值?

  myfunction<-function(id=1:20) {
  files<-list.files(pattern="*.csv")
  myfiles = do.call(rbind, lapply(files, function(x) read.csv(x,stringsAsFactors = FALSE)))  

   for (i in id) {  
   good<-complete.cases(myfiles)
   newframe<-myfiles[good,]
   cases<-newframe[newframe$ID %in% i,]
   nobs<-nrow(cases)  
  }
  clean<-data.frame(id,nobs)
  clean
 }

感谢。

1 个答案:

答案 0 :(得分:0)

我们可以在lapply()内完成所有操作,如下所示(未经测试):

myfunction <- function(id = 1:20) {
  files <- list.files(pattern = "*.csv")[id]

  do.call(rbind,
          lapply(files, function(x){
            df <- read.csv(x,stringsAsFactors = FALSE)
            df <- df[complete.cases(df), ]
            data.frame(ID=x,nobs=nrow(df))
            }
            )
          )  
}